將需求轉化為資料庫的邏輯模型
通過er圖的形式對邏輯模型進行展示
與所選用的具體的dbms系統無關
關係:乙個關係對應通常所說的一張表。
元組:表中的一行即為乙個元組。
屬性:表中的一列即為乙個屬性;每乙個屬性都有乙個名稱,稱為屬性名。
候選碼:表中的某個屬性組,它可以唯一確定乙個元組。
主碼:乙個關係有多個候選碼,選定其中乙個為主碼。
域:屬性的取值範圍。
分量:元組中的乙個屬性值。
矩形:表示實體集,矩形內寫實體集的名字
菱形:表示聯絡集
橢圓:表示實體的屬性
線段:將屬性連線到實體集,或將實體集連線到聯絡集
常見資料庫設計正規化包括:
第一正規化,第二正規化,第三正規化及bc正規化
當然還有第四及第五正規化,不過這裡我們會把重點放到前三個正規化上,這也是目前我們大多數資料庫設計所要遵循的正規化。
資料冗餘:是指相同的資料在多個地方存在,或者說表中的某個列可以由其他列計算得到,這樣就說表中存在著資料冗餘。
第一正規化(1nf):資料庫表中的所有欄位都是單一屬性,不可再分的。這個單一屬性是由基本的資料型別所構成的,如整數,浮點數,字串,等;換句話說,第一正規化要求資料庫中的表都是二維表。
第二正規化(2nf):資料庫的表中不存在非關鍵字段對任一候選關鍵字段的部分函式依賴。
部分函式依賴是指存在著組合關鍵字中的某一關鍵字決定非關鍵字的情況。
換句話說,所有單關鍵字段的表都符合第二正規化。
由於**商和商品之間是多對多的關係,所以只有使用商品名稱和**商名稱才可以唯一標識出一件商品。也就是商品名稱和**商名稱是一組組和關鍵字。
上表中存在以下的部分函式依賴關係
(商品名稱) --> (**,描述,重量,商品有效期)
(**商名稱) --> (**商**)
存在的問題:1.插入異常2.刪除異常3.更新異常4.資料冗餘
第三正規化(3nf):第三正規化是在第二正規化的基礎上定義的,如果資料表中不存在非關鍵字段對任意候選關鍵字段的傳遞函式依賴則符合第三正規化。
存在以下傳遞函式依賴關係:
(商品名稱)-->(分類)-->(分類描述)
也就是說存在非關鍵字段「分類描述」對關鍵字段「商品名稱」的傳遞函式依賴。
存在問題:(分類,分類描述)對於每乙個商品都會進行記錄,所以存在著資料冗餘。同時也存在資料的插入,更新及刪除異常。
boyce.codd正規化(bcnf):在第三正規化的基礎之上,資料庫表中如果不存在任何欄位對任一候選關鍵字段的傳遞函式依賴則符合bc正規化。也就是說如果是復合關鍵字,則復合關鍵字之間也不能存在函式依賴關係。
假定:**商聯絡人只能受僱於一家**商,每家**商可以**多個商品,則存在如下決定關係:
(**商,商品id) --> (聯絡人,商品數量)
(聯絡人,商品id) --> (**商,商品數量)
存在下列關係因此不符合bcnf要求:
(**商) -> (**商聯絡人)
(**商聯絡人) -> (**商)
並且存在資料操作異常及資料冗餘
資料庫邏輯設計
資料庫設計包含需求設計 邏輯設計 物理設計和維護優化。為了設計出沒有資料冗餘和資料維護異常的資料結構,我們需要遵循以下規範 資料庫表中的所有欄位都只有單一屬性 單一屬性的列都是由基本的資料型別所構成 設計出來的表都是簡單的二維表 針對這個問題,我們怎麼破呢?我們對上面這個表拆分為3個表 學生表 課程...
資料庫的邏輯設計
oracle優化軟結構 能移出system表空間的東西盡量移出。將程式表和資料表分別存在不同的表空間。減少io操作 索引段不應該與其相關的表存在同乙個表空間。因為dml操作的時候同時會維護所以。alter index index name rebuild tablespace tablespace ...
資料庫設計的那些事
1,表和字段的設計規範,當然每個公司有其自己的規範 1 要有可讀性 eg studentaddress,不要設計成stuaddress 2 表意性 eg student,不要設計成ch1 3 盡量不要縮寫 eg studentaddress,不要設計成stuadd 2,字段型別的選擇 在進行資料庫資...