首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 系列之一:資料庫設計規範流程與 E-R 建模實戰

     編輯:MySQL 綜合教學

資料庫設計:從需求到物理實現的標準化流程

許多開發者誤以為資料庫設計只是「建庫、建表、加欄位」,實則是一套完整的工程流程:**需求分析 → 邏輯設計 → 物理設計 → 維護優化**,每階段側重點不同。

為什麼要正規化設計?

良好設計可減少資料冗余、避免操作異常、支援有限儲存與高效存取。經驗教訓:畢業設計因前期設計不佳,後期查詢極度困難,寫再多 SQL 也難彌補架構缺陷。

四大階段詳解

1. 需求分析:解決三個核心問題

  • 需要什麼資料? 從業務需求文檔提煉
  • 資料有哪些屬性? 對應表的欄位(屬性集)
  • 屬性特點為何? 判斷是否永久儲存、讀寫頻率、時效性

2. 邏輯設計:繪製 E-R 圖(與具體 DBMS 無關)

核心三要素:

  • 實體集:具備相同屬性的物件(對應資料表)
  • 屬性集:實體擁有的屬性(對應欄位)
  • 聯系集:實體間的關聯(1:1、1:N、M:N、繼承、依賴、連接)

關鍵概念:

術語對應關係
關系一張資料表
實體管理物件
元組表的一行資料
屬性表的一欄
主關鍵字唯一標識實體的屬性
候選關鍵字需多屬性組合標識

實戰案例:學生住宿管理系統 E-R 建模

實體與屬性識別:

學生: {學號, 姓名, 性別, 聯系方式, 宿舍號}
宿管: {宿管ID, 姓名, 性別, 聯系方式}
物業: {物業ID, 姓名, 性別, 聯系方式}
後勤: {後勤ID, 姓名, 性別, 聯系方式}
住宿信息: {id, 姓名, 學號, 性別, 宿舍號, 專業, 班級, 聯系方式}
宿舍: {宿舍ID, 樓棟號, 宿舍號}
物品報修: {id, 物品名稱, 損壞情況, 報修人, 聯系方式, 宿舍號, 報修時間, 緊急程度, 是否處理}
用水信息: {id, 宿舍號, 用水量, 本月剩余水量, 剩余金額, 欠費狀態}
用電信息: {id, 宿舍號, 用電量, 本月剩余電量, 剩余金額, 欠費狀態}

E-R 圖關聯說明(因原圖過大僅展示部分):

E-R 圖局部

  • 矩形 = 實體,橢圓 = 屬性,菱形 = 聯系
  • <m> = 非空,<pi> = 主鍵,<ci> = 候選鍵

六種實體聯系類型

3. 物理設計:落地實現的關鍵步驟

  1. 選擇 DBMS:企業級 Oracle/SQL Server;互聯網首選 MySQL/PostgreSQL
  2. 命名規範:見名知意、蛇形命名、統一前綴、避免保留字
  3. 確定欄位類型:核心難點在 CHAR vs VARCHAR 選擇
CHAR vs VARCHAR 深度解析
類型說明例子
一對多 (1:N)一方對應多方班級 1:N 學生
多對一 (N:1)多方對應一方學生 N:1 班級
多對多 (M:N)雙向多對應老師 M:N 學生(需中間表)
一對一 (1:1)雙向唯一對應用戶 1:1 用戶詳情
繼承子實體繼承父實體屬性學生/老師 繼承 人
依賴弱實體依賴強實體存在門窗 依賴 房子
特性CHAR(n)VARCHAR(n)
儲存方式固定長度,不足右補空格變長,實際長度+1~2 位元組長度前綴
最大長度255 字元65,535 位元組(共享行大小限制)
空間效率定長資料較優變長資料節省空間
更新效能無行遷移風險長度增長可能觸發 行遷移
索引效能固定偏移量,略快需讀取長度前綴

行遷移:Oracle 定義 - 行初始能放入 block,更新導致變長超出 block 剩餘空間,Oracle 將行遷移至新 block,保留原指標指向新位置,ROWID 不變。MySQL InnoDB 類似機制稱為「頁分裂」。

選型建議:
- 定長、高頻更新、極短欄位(如性別、狀態、ISO 代碼)→ CHAR
- 其餘變長文本 → VARCHAR
- 大文本 → TEXT/LONGTEXT
- 大數據量場景才需深度權衡,中小專案 VARCHAR 通吃無壓力

4. 維護與優化(略)

包含索引優化、查詢重寫、分區分表、讀寫分離、監控告警等,專業 DBA 領域,開發者了解基礎即可。

總結:資料庫設計是系統穩定性基石,投入前期設計成本遠低於後期重構代價。建立團隊設計規範、評審機制、版本化變更流程,才能避免「為了趕工期埋下技術債」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved