1. 程式人生 > >資料建模(E-R圖)

資料建模(E-R圖)

※ 軟體開發的步驟可大致分為(瀑布模型):
1.需求分析
2.系統設計
3.編碼實現
4.系統測試
5.執行維護

※ 建模是在步驟2設計中的,(軟體powerdesigner)

※ 實體-關係圖

※ 實體-關係圖(Entity Relationship Diagram),也稱為E-R圖,提供了表示實體、
屬性和關係的方法,用來描述現實世界的概念模型。

※ 構成E-R圖的基本要素是實體、屬性和關係
1 .實體(Entity):實體用來表示具有相同特徵和性質的事物(類似於java的類),實體由實體名和實體屬性來表示。
2 .屬性(Attribute):實體所具有的某一特性,一個實體可以有若干個屬性
3 .關係(Relationship):實體彼此之間相互連線的方式稱為關係。
一般可分為以下 3 種類型:

    一對一關係 (11)
    一對多關係 (1N)
    多對多關係 (M ∶ N)

※ 構建E-R圖的標記
實體之間關係
may-be(虛線) 和 must-be(實線)
在實體與實體之間的關係中,都會存在著may-be和must-be這倆種情況,例如:
系統中有顧客和訂單倆個實體(1:N關係),一個顧客對應多個訂單,一個訂單對應一個顧客,而且一個顧客可以(may be)沒有訂單和他對應,一個訂單一定(must be)會有顧客和它對應.
ER圖中實體中符號的表示
1) # : 唯一, 以後可能表示為主鍵
2) * : 非空
3) o : 可有可無
4) 虛線: may be 顧客這邊虛線,顧客可能沒有訂單
5) 實線: must be 訂單這邊實線,訂單一定是屬於某個客戶。
6) 豎槓(|): 代表要強制在(|)一方建立一個聯合主鍵,將對方ID拿過來做聯合主鍵
7) 傘狀圖示代表多的一方,不是傘狀圖示則代表一的一方

※ 資料庫設計步驟:

1.實體的名字轉換為表的名字
2.實體的屬性轉換為表中的列
3.具有唯一特點的屬性設定為表中的主鍵
4.根據實體之間的關係設定為表中某列為外來鍵列(主外來鍵關聯)
注意:第四步主要是:實體關係—>表關係

注意:
設計關係資料庫時,遵從不同的規範要求,才能設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。
※ 關係資料庫有六種正規化:
第一正規化(1NF)
第二正規化(2NF)
第三正規化(3NF)
巴斯-科德正規化(BCNF)
第四正規化(4NF)
第五正規化(5NF,又稱完美正規化)
注:滿足最低要求的正規化是第一正規化(1NF)。在第一正規化的基礎上進一步滿足更多規範要求的稱為第二正規化(2NF),其餘正規化以次類推。一般說來,資料庫只需滿足第三正規化(3NF)就行了。

※ 第一正規化(原子性,列不可分)
一個表中,每個列裡面的值是不能再分割的.

        例如:我們設計的表中有一個列是:愛好
        這個列的值可能會是這樣:足球籃球乒乓球
        但是這值是可以再分割的:足球、籃球、乒乓球

所以這種設計是不滿足第一正規化

※ 第二正規化(非主鍵列都必須依賴於主鍵列)
第二正規化是在滿足第一正規化的基礎上
表中的非主鍵列都必須依賴於主鍵列

 例如:
        訂單表: 訂單編號 是主鍵
        訂單編號  訂單名稱   訂單日期  訂單中產品的生產地

這幾個非主鍵列中,產品生產地是不依賴於訂單編號的,所以這種設計是不滿足第二正規化

※ 第三正規化:(不能產生依賴傳遞)
第三正規化是在滿足第二正規化的基礎上
表中的非主鍵列都必須直接依賴於主鍵列,而不能間接的依賴.

    例如:
    訂單表:   訂單編號 是主鍵
    訂單編號  訂單名稱  顧客編號  顧客姓名

顧客編號依賴於訂單編號,顧客姓名依賴於顧客編號,從而顧客姓名間接的依賴於訂單編號,那麼這裡產生了依賴傳遞,所以這個設計是不滿足第三正規化的

※ 主外來鍵說明

※ 主鍵:
1.能做主鍵的列必要滿足非空唯一的特點
2.只要滿足非空唯一的任何列都可以做主鍵
3.可以讓表中一個有意義的列做主鍵,比如說學號,它既表示學生學號又作為表中的主鍵,因為這個列滿足非空唯一的條件
4.也可以找一個沒有意義的列做主鍵,就是用來唯一標識一行記錄的
5.我們可以讓多個列聯合在一起做表中的主鍵,那麼它就是聯合主鍵,要求這幾個列的值聯合在一起是非空唯一的
※ 外來鍵:
1.表中的某一個列宣告為外來鍵列,一般這個外來鍵列的值都會引用於另外一張表的主鍵列的值(有唯一約束的列就可以,不一定非要引用主鍵列)
2.另外一張表的主鍵列中出現過的值都可以在外來鍵列中使用,沒有出現過的值,都不能使用
3.外來鍵列值也可以為空的,提前是這個外來鍵列在表中不做主鍵,因為我們也可以把表中的外來鍵列當做主鍵來使用(只有滿足非空唯一的要求就可以)
4.如果把B表中的聯合主鍵的值引用到A表中做外來鍵,因為是倆個列在B表中做聯合主鍵,那麼A表引用過來的時候也要把倆個列的值都引用過來,那麼它們在A表中就會作為一個聯合外來鍵出現