資料庫設計(Database Design)
阿新 • • 發佈:2019-01-27
資料庫設計(DB Design)
提綱
- DB設計
- 特點
- 目的
- 方法
- ER模型
- Mapping
- 規範化
資料庫設計綜述
- 資訊系統(Information System):可以通過組織收集管理控制和傳播的資訊資源。資料庫就是資訊系統的基本組成。
- 應對軟體危機所產生的結構化開發方法:Information Systems Lifecycle(ISLC)
- collect requirements
- design system
- implement system
- maintain system
- 資料庫應用系統開發包括
- 資料庫設計(Database Design)
- 資料庫設計的目的
- 幫助理解資料的含義
- 促進關於資訊交流的溝通
- 資料庫設計的三個階段
- 資料庫概念上的設計(conceptual database design)
- 資料庫邏輯上的設計(logical database design)
- 資料庫物理上的設計(physcal database design)
- 關係圖
- 資料庫設計的目的
- 資料庫管理系統選擇(DBMS Selection)
- define terms of reference of study
- shortlist two or three products
- evaluate products
- recommend selection and produce report
- 應用設計(Application Design)
- 包括的主要兩個方面
- 使用者介面設計
- 事務設計(transaction design)
- 事務
- 概念:一個使用者或一個應用程式所執行的訪問或修改資料庫的一個或一系列動作。
- 型別:retrieval,update,mixed
- 包括的主要兩個方面
- 資料庫設計(Database Design)
E-R 模型
- 使用E-R模型的原因:資料庫設計者,程式設計師和終端使用者看待資料的方式不同
- 定義:E-R model is a model for communication that is non-technical and free of ambiguities
E-R模型中的基本概念
- 實體型別(Entity Types)
- 概念: a group of objects with the same properties identified by an enterprise as having an independent existence.
- 例項和表示:
- 關係型別(Relationship Types)
- 概念: a set of meaningful associations among entity types
- 表示:
- 關係的度(degree):number of participating entities in a relationship
- complex relationships:度大於2的關係
- recursive relationship:
- 兩個實體之間可以有多個關係:
- 屬性(Attributes)
- attribute:a property of an entity or a relationship type.
- attribute domain: the set of allowable values for one or more attributes.
- simple attribute: an attribute composed of a single component with an independent existence.
- composite attribute: an attribute composed of multiple components, each with an independent existence.
- single-valued attribute
- multi-valued attribute(像陣列)
- derived attribute
- Keys: candidate key, promary key, conposite key
- 例子:
- 實體型別
- 強實體:不依賴於其他實體的實體。
- 弱實體:依賴於其他實體的實體。(a characteristic of a weak entity is that each entity occurrence cannot be uniquely identified using only the attributes associated with taht entity type)
- 例項:
- Structure Constraints
- Multipliity(數量上的對應關係)注意含義
- Multiplicity is made up of two types of restrictions on relationships: cardinality (實體數量上的限制:最大值)and participation(是否參與的限制:最小值)
- E-R模型的問題
- 扇形陷阱(fan trap):當一個實體與其他實體之間存在兩個或更多的一對多聯絡時,就有可能存在扇形陷阱。
- 顯然我們無法回答上圖的問題,為了避免這種問題,我們將E-R圖改為這種形式:
- 深坑陷阱(chasm trap):在關聯實體的通路上存在一個或多個多樣性最小為0的聯絡時,就可能產生深坑陷阱。
- 改進方法:新增聯絡以標識遺漏實體的聯絡。
增強E-R模型
- 實體型別(Entity Types)
這一部分還後面對映九步演算法中的8,9兩步息息相關。
- 增強E-R模型可以理解為在原有模型的基礎上增加了一下OOP的東西
- mandatory和optional,disjoint和nondisjoint 2*2可以形成四種組合
- 對應如下的圖片:
由E-R模型向關係模型對映
- E-R模型和關係模型的主要區別
- 關係模型用主鍵和外來鍵隱形的表示參與的實體
- 關係模型的列不存在多值
- 對比圖
- 模型轉化的九步演算法:
- 轉化強實體:
- 建立新表
- 表的列包括所有單值實體屬性,並把複合屬性拆開放進去
- 找到主鍵和候選鍵(找不到手工加)
- 轉化一對一弱實體:
- 找到這個實體的依賴方
- 把這個實體的單值屬性和複合屬性拆開加入到依賴方
- 轉化一對多或多對多弱實體:
- 建立新表
- 表的列包括所有單值實體屬性,並把複合屬性拆開放進去
- 找主鍵:對於一對多關係,主鍵包括兩部分本實體的部分鍵和依賴實體的主鍵。對於多對多關係,建立一個新列來做主鍵,然後參考步驟6
- 轉化一對一關係:
- 確定參與一對一關係的兩張表
- 選取一張表(通常是完全參與的表)
- 這張完全參與的表加一個外來鍵與另一張表的主鍵相關聯
- (其他地方解釋不清楚)
- 轉化一對多關係:
- 假定S是“多”那一方,T是“一”那一方
- S新增外來鍵關聯T的主鍵
- 轉化多對多關係
- 建立一張新表
- 這張表包含T的種種值
- 外來鍵是原先兩張表的主鍵
- 把外來鍵集合作為主鍵
- 對於多值(類似陣列)的處理
- 建立一張新表
- 這張表只有一個值
- 然後當一對多去處理
- {Manadatory, Or}
- 繼續看上面關於E-R模型的那張圖,這其實是最好處理的一種情況。
- 我們發現,所有子類就可以替代父類,因此我們沒有必要建立父類表,直接用子類表就可以了。
- 可以看到,staff這張表不存在了
- 對於其他三種情況:在保留父類的情況下使用子類,在父類和子類間通過foreignkey來繼承其相關屬性。
*
- 轉化強實體:
規範化(Normalization)
- 什麼是規範化?生成一組既具有所期望的特性又能瞞住企業資料需求的關係的技術
- 性質:
- 屬性的個數最少
- 具有緊密邏輯聯絡的屬性均在同一個關係中
- 最少的冗餘,即每個屬性只出現一次
- 優點:
- 易於使用者訪問
- 資料易於維護
- 計算機儲存空間小
- 缺點 :
- 效能相對降低
- 三種異常
- 插入異常
- 刪除異常
- 修改異常
- 函式依賴(functional dependency)
- 在一個關係中,一個A只對應一個B記做 A->B(一個A不能對應多個B)
- 舉例:
- 完全函式依賴
- 部分函式依賴
- 舉個例子就可以:
- 傳遞依賴(transitive dependency)
- A->B, B->C 得到A->C
- 第一正規化(1NF)
- 每一行和每一列相交的位置有且僅有一個值
- 可以理解成為了避免ER模型中的組合屬性啥的,拆成單值(都應該符合吧)
- 第二正規化
- 滿足第一正規化的要求,並且每個非主關鍵字屬性完全依賴於主關鍵字
- 例子:
- staffNo,companyNo→staffName,staffAge,staffBirthDay,companyName,companyAge
拆成staffNo→staffName,staffAge,staffBirthDay,companyNo
companyNo→companyName,companyAge - 這樣可以避免多個無關的實體混合在一張表中,並使它們的關係通過外來鍵連線
- 第三正規化
- 滿足第一正規化和第二正規化的要求並且所有非主關鍵字屬性都不傳播依賴於主屬性的關係
- 也就是說任何非主屬性不依賴於其它非主屬性(在2NF基礎上消除傳遞依賴)
- 這個比較難理解啊
- 這個部落格有例子講的還可以