數據庫設計(一)(需求分析,演示,設計範式,表及字段關係)

數據庫設計


需求分析
1.瞭解系統中所要存儲的數據
2.瞭解數據的存儲特色(例如日誌:存儲量大,但又不是主要數據)
3.瞭解數據的生命週期數據庫

要搞清楚的問題
1.實體及實體之間的關係(1對1,1對多,多對多)
2.實體所包含的屬性
3.那些屬性或屬性的組合能夠惟一標識一個實體數據庫設計


實例演示
模塊:用戶,商品,訂單,購物車,供應商
用戶:用戶記錄用戶嘻嘻你
屬性有:用戶名,密碼,電話,郵箱,身份證,地址,姓名,暱稱
惟一標識屬性:用戶名,身份證,電話
存儲特色:隨系統上線時間逐漸增長,永久保存函數

商品:用戶記錄網站銷售的商品信息
惟一標識:商品編碼,(供應商,名稱)
特色:對於下線商品能夠歸檔存儲,切記不能刪除網站

訂單模塊:
標識:訂單號,(用戶名,下單時間,商品)
特色:永久存儲(分表,分庫存儲)編碼

購物車:
惟一標識:(用戶名,商品編號,加入時間),購物車編號
特色:不用永久存儲(設置歸檔,清理規則)spa

供應商模塊:用戶保存所銷售商品的供應信息
標識:(供應商編號),(營業執照)
存儲特色:永久存儲,(不會太多,天然保存)設計

首先要去分析這個項目有哪些模塊--->而後針對具體模塊分析有哪些屬性--->針對屬性分析哪一個屬性或哪幾個屬性的集合能夠用來標識這個屬性[惟一標識]------->分析這個模塊數據是否永久存儲,是否數據增加很快,是否常常查詢---->若是是就要考慮分庫分表了。若是不是,那麼這些數據是否只會存儲必定時間,是否須要永久記錄--->若是是咱們就按期歸檔及數據的遷移操做了。日誌

關係:
用戶  一對多  訂單
用戶  一對多  購物車
購物車 多對多 商品
訂單   多對多 商品
商品   多對多 供應商生命週期

邏輯設計:
1.將需求轉化爲數據庫邏輯模型
2.經過ER圖的形式對邏輯模型進行展現
3.同所選用的具體的DBMS系統無關效率

設計範式:
常見數據庫設計範式包括:第一,第二,第三範式以及BC範式還有第四第五,重點是前三範式
這也是目前咱們大多數數據庫設計所要遵循的範式

數據操做異常及數據冗餘
分三種:1.插入異常:若是某實體隨着另外一個實體的存在而存在,即缺乏某個實體時沒法表是這個實體,那麼這個表就存在插入異常
2.更新異常:若是更改表所對應的某個實體實例的單獨屬性時,須要將多行更新,那麼就說這個表存在更新異常。
3.刪除異常:若是刪除表的某一行來反映某實體實例失效時致使另外一個不一樣實體實例信息丟失,那麼這個表中就存在刪除異常
數據冗餘:是指相同的數據在多個地方存在,或者說表中的某個列能夠有其餘列計算獲得,這樣就說表中存在着數據冗餘

 

數據庫範式:

第一範式:
數據庫表中的全部字段都是單一屬性,不可再分。
這個單一屬性是有基本的數據類型所構成的
換句話說:第一範式要求數據庫中的表都是二維表

第二範式:
定義:數據庫的表中不存在非關鍵字段對任一候選關鍵字段的部分函數依賴。
部分函數依賴是指存在着組合關鍵字種的某一關鍵字決定非關鍵字的狀況
換句話說:全部單關鍵字段的表都符合第二範式。
存在問題:增刪改

第三範式:
在第二範式的基礎之上定義的。
若是數據表中不存在非關鍵字段對任意候選關鍵字段的傳遞函數依賴則符合第三範式。
舉例:
商品名稱  價格  商品描述  重量  有效期     分類      分類描述
可樂      3             250   2014。6  酒水飲料   碳酸飲料
蘋果      8             500            生鮮食品   水果
存在傳遞函數依賴關係:
商品名稱-》分類-》分類描述,也就是說存在非關鍵字段「分類描述」對關鍵字段「商品名稱」的傳遞函數依賴
存在問題:每存一個商品都會記錄分類和分類描述,存在數據冗餘,還有數據的增刪改

BC範式:
定義:在第三範式基礎上,數據庫表中若是不存在任何字段對任一候選關鍵字段的傳遞函數依賴則符合BC範式。
也就是說若是是複合關鍵字,則複合關鍵字之間也不能存在函數依賴關係
舉例:
供應商 商品ID    供應商聯繫人  商品數量
一廠      1       張三          10
一廠      2       李四          20
二廠      1       王五          20
假定:供應商聯繫人智能受僱於一家供應商,每家供應商能夠供應多個商品,則存在以下決定關係:
(供應商,商品ID)-》(聯繫人,商品數量)
(聯繫人,商品ID)-》(供應商,商品數量)
存在下列所以不符合BCNF要求:
(供應商)-》(供應商聯繫人)
(供應商聯繫人)-》(供應商)
而且存在數據操做異常及數據冗餘
解決,拆表
1表:供應商 商品ID    商品數量            2表: 供應商     供應商聯繫人

這樣好記
1NF:列不可分就知足1NF了。
2NF:不存在部分依賴,好比 (A,B)→C。(消除非主屬性對主屬性的傳遞依賴,即徹底依賴於主鍵)
3NF:不存在傳遞依賴,好比A→B→C。(在2NF基礎上消除了傳遞依賴)

 

物理設計:

1.選擇合適的數據庫管理系統
    Oracle,SQLServer,MySQL及PgSQL
2.定義數據庫,表及字段的命名規範
3.根據所選的DBMS系統選擇合適的字段類型。(varchar仍是char)
4.反範式化設計。(爲了特定讀取,省去查詢或者其餘操做,增長了數據庫的冗餘,換來了讀取效率)

數據庫的選擇:
常見的DBMS系統:Oracle SQLServer  這兩款是商業數據庫   MySQL  PgSQL  這兩款屬於開源數據庫   --成本的考慮
配合的語言
用於場景(公司性質)   商業數據庫(更適合企業級項目)  開源數據庫(適用於互聯網項目)

 

                                                                                                         未完待續(碼字不易)……

相關文章
相關標籤/搜索