前面的兩篇博客分別介紹了概念數據模型、邏輯數據模型以及物理數據模型和邏輯數據模型常用的三種數據模型,這篇博客介紹在數據庫的設計過程當中將概念數據模型轉化爲邏輯數據模型的方法,以及涉及的一些基本的概念。本篇文章所介紹的主要是針對關係數據庫中概念數據模型和邏輯數據模型之間的轉換。數據庫
首先,說明一下數據庫中常常用到的用於標示一條記錄(元組)的碼的概念,碼又分爲超碼、候選碼、主碼。ui
超碼:在一個關係中,能夠用來惟一標識一個元組的屬性的集合稱之爲超碼。.net
候選碼:在一個關係中,可以用來惟一標識一個元組的最少屬性集合稱之爲候選碼。設計
主碼:在一個關係中,若是用來惟一標識一個元組的候選碼中只有一個屬性,則這個屬性稱之爲主碼。3d
三者之間的關係以下:超碼是候選碼的超集,候選碼是主碼的超集。下面以一個講解清楚。假設一個關於學生信息的表格student,其中的屬性有,stu_id(學號),name(姓名),age(年齡),address(地址)。那麼超碼能夠由全部的屬性組成的集合構成,例如(stu_id,name,age,adress)、(stu_id,name)、(stu_id,age)等均可以叫作student的超碼;候選碼爲(stu_id);由於候選碼只是由其中的一個屬性組成,所以這個候選碼又能夠稱之爲主碼。blog
前面博文討論過,概念數據模型是用E-R圖表示的,其中的三要素是實體、屬性、聯繫。將概念數據模型轉化爲邏輯數據模型的步驟其實就是將E-R圖中的各個部分轉化爲邏輯數據模型中使用的具體數據模型的各個部分。若是沒有特別的交代,下面所說的邏輯數據模型指代的是關係數據模型。將概念數據模型轉化爲邏輯數據模型的大致規則以下:概念數據模型中的實體轉化爲邏輯數據模型中的關係,對應的實體的屬性轉化爲關係數據模型關係的屬性(也就是列);根據實體之間聯繫的不一樣具備不一樣的處置策略。get
實體之間的聯繫分爲1:一、1:n、和m:n。下面分別對這三種聯繫轉化爲關係的步驟作討論。博客
1:1:這種關係是最好理解,同時也是最容易處理的關係。實體之間存在着一一對應的關係。在這種聯繫中,能夠建立新的關係描述這種聯繫,這事將兩個實體的主碼做爲新的關係的候選碼;固然也能夠沒必要建立新的關係,將一方關係的主碼做爲另外一方關係的外鍵。例如兩個關係A和B存在1:1聯繫,那麼能夠將A的主碼做爲B的外鍵,同時將B的主碼做爲A的外鍵,具體狀況依據於具體的環境。以所作的紅包的小練習爲例,註冊用戶和帳戶之間存在着1:1的聯繫,用戶管理者帳戶。E-R圖以下:方法
圖 1 用戶與帳戶的E-R圖im
用戶與帳戶之間存在一一對應關係,可是建立帳戶的時候須要用戶已經存在,所以這種狀況下須要將用戶的"uid"做爲帳戶的外鍵,那麼對應的關係以下:
圖 2 用戶和帳戶的關係
由於,在這個例子中額外的建立關係會致使沒必要要的額外存儲空間的增長,所以再也不從新建立額外的關係。
1:n:一個實體能夠對應額外的多個實體。這種聯繫中能夠沒必要建立額外的關係表示兩者之間的1:n的聯繫,此時只須要將「1」方的關係的主碼放入到「n」方的關係的屬性中做爲其外鍵便可,同時將聯繫的屬性加入到「n」方的關係中;固然也能夠建立額外的關係表示兩者之間的聯繫,那麼「1」和「n」方的關係的主碼做爲候選碼,同時將聯繫的屬性加入到新創建的關係中。可是,這種狀況下額外的建立新的關係顯得冗餘。仍是以所練習的紅包項目爲例,一個大的紅包根據指定的數值能夠派生出不少的小紅包。這兩個實體分別對應着一個關係,其E-R圖以下:
圖 3 小紅包的大紅包的E-R圖
由圖3得知,小紅包必須依賴大紅包存在,所以在小紅包中將大紅包的bid做爲小紅包的外鍵便可,這樣就沒必要創建額外的關係了。對應的關係以下:
圖 4 大紅包和小紅包對應的關係
m:n:對於這種多對多的聯繫,必須創建新的關係以描述這種聯繫。「聯繫」對應的關係的屬性中至少包含他說關聯的雙方實體的「主鍵」,若聯繫也有自身的屬性,那麼該屬性同樣歸入新創建的關係的屬性中。因爲紅包項目中沒有遇到相似的聯繫,所以以最經典的學生選課系統爲例。很明顯學生選課系統中的實體對應有學生和課程,一個學生能夠選修多門課程,一門可能可被多個學生選修,所以兩個實體之間是一種多對多的關係,對應的E-R圖以下:
圖 5 學生與課程多對多關係圖
圖 6 學生與課程對應關係
在上例中,學生與課程之間存在着多對多的聯繫,所以創建起新的選課關係來描述這種聯繫。在新的關係中將學生的主碼和課程的主碼做爲選課的候選碼,學生的主碼和選課的主碼的組合會出如今對應的選課關係中。若是此時要查詢一個學生的成績,須要使用聯合查詢的方式。