本章就前面介紹術語時介紹的表之間的關係型別、參與度、參與方式進行講解
型別就3種:一對一,一對多,多對多,所以這裡主要講解如何用**法來展現該關係。
一對一一對多
多對多把3中關係的示意圖放在一起講解,從上往下依次是
table a中的乙個記錄只與table b中的乙個記錄有關
table b中的乙個記錄只與table a中的已經記錄有關
table a中的乙個記錄與table b中的多個記錄有關
table b中的乙個記錄與table a中的乙個記錄有關
table a中的乙個記錄與table b中的多個記錄有關
table b中的乙個記錄與table a中的多個記錄有關
注意,現實中使用時還需要新增上欄位,將特定欄位與特定字段使用上述示意圖中的連線符號連線起來,代表不同的關係。
自聯結關係
下面拿這幾張表來做例子:
接著構建接下來這樣的表:
這樣做是為了判斷表與表之間是一對
一、一對多還是多對多的關係,看其中填入的兩個資料,從左側的豎排的bulidings來看,該錶對於橫排的classes是一對多的,也就是1:n,因為一棟建築物裡可以安排很多類課程。再來看左側豎排的classes對橫排的bulidings是一對一的,也就是1:1,因為乙個課程一般只安排在乙個教室內,最後結合這兩個資料,我們就可以得出,bulidings對classes是1:n的關係。注意,bulidings對於classes是1:n,classes對於bulidings是1:1,但是我們最後說bulidings與classes的關係是1:n,那麼這個計算式子是怎麼推算出來的呢?看下面:
看到這個可能有人會問,為什麼沒有 m:n + m:n 這樣的形式呢?因為我們推算上面的式子時,都是拿上述**中「豎排的表中的一條記錄對應橫排表中的幾條記錄」這樣的問答方式來確定關係的,那麼
m:n 就是 m 條記錄對應 n 條記錄,但是這樣的話,我們還是可以把 m 條記錄拆分成一條條的單條記錄來審查他和另一張表的關係,所以還是可以拆成 1:n、1:1 這樣的形式的。
再來看乙個自聯結的情況,如表中的staff(教員)表,其中存在著乙個教員管理者幾個教員的情況,所以該錶對於自身是一對多的情況,即1:n。
那麼是否需要將這個**中的空格都填滿呢?答案是不用的,因為有的表之間並沒有直接的關係,如bulidings(建築)表和compensation(薪酬)表,這時候兩者的關聯的空格就可以空著。
最後再來總結一下這張表的用法
前面我們借助了那張**確定了兩張表之間的關係,並完成了示意圖,接下來說明如何使用資料庫知識實現上述關係,具體實現就是修改表結構,根據情況在其中新增新的說明或者新的表。
一對一只用主鍵和外來鍵,將一對一關係中的一張表中的「一」對應的字段複製到另一張表中,作為外來鍵,由於是一對一,所以哪張表複製到哪張表都沒關係。
一對多這裡也是採用主鍵和外來鍵來解決問題,只不過這裡的外來鍵就指定是「多」對應的表中的字段了。
多對多多對多比較複雜一點,我們前面是使用關聯表來解決的,現在還要在關聯表中加入主鍵、外來鍵。這裡不贅述關聯表的製作方法了,接著將關聯表中的字段作為各自表的外來鍵。例如下面這種情況
students
classes
student classes
外來鍵要素
這裡就字段說明中需要修改主鍵的某些說明,至於原因,可以對照這些字段說明的含義理解:
* 通用元素中的4個元素 *
邏輯元素中的5個元素
現在,將為每個關係建立特徵。這些特徵指示的是刪除乙個記錄所造成的後果,關係中每個表的參與型別與參與度。為每個關係定義刪除規則
刪除規則:
識別每個表的參與型別
employees(員工表)
slarys(薪水表)
customers(顧客表)
其中,slarys表應該指定為強制的參與型別,這樣才能保證一項工資支出對應到乙個員工身上。
而customers表應該可選的參與型別,這樣當顧客輸入一條記錄時,才可以選擇是否需要一名員工服務。
而且對於參與型別,示意圖上也有相應的顯示
可以看到相比於原來的一對一的情況,又多了一豎和乙個圈,分別代表不同的含義,如,一豎表示是強制的參與型別,乙個圈表示是可選的參與型別。
這裡插一句題外話,參與方式、參與度都是乙個表對於另外一張表來說的,而連線兩張表關聯的就是我們前面示意圖中畫的關係,所以才會將參與方式畫在關係後的,因為沒有關係就不用談參與方式了。
識別每個表的參與度
其實這個更加偏向於從業務層來解釋為什麼要定義這個值,對資料庫來說存多少個記錄其實是沒差別的。那麼就直接來看如何使用示意圖來表示表之間的參與度。
可以看到表示的方法跟一般的參與度表示法是一樣的:(min,max),只是這裡是第一次將參與方式與參與度、表關係放在一起考慮了。
可以看到如果是強制參與的,那麼min就是1,如果是可選的,那麼min就是0。
還有,如果是一對一的,那麼max就是1,如果是一對多、多對多的,那麼max就是按照業務邏輯來,這裡拿max表示。
與使用者和管理人員驗證表關係
目的如下:
如果你嚴格按照上面的步驟下來了,那麼你就可以保證關係層次的完整性,也就是下面這些
《自己動手設計資料庫》第4章 概念性概述
前面傻傻的把第一部分內容揉在一起,結果自己後來再去看的時候,自己都看吐了,所以接下來還是老老實實一章一章的來吧,這樣自己以後也看著輕鬆一點。簡單了解一下資料庫設計的總體過程以及完成設計過程的重要性。之後會在接下來的章節中展開詳細的介紹。只遵循部分設計過程,與完全不使用設計過程一樣糟糕。總之就是你有膽...
《自己動手設計資料庫》學習筆記系列 第五章 訪談
開展訪談 訪談能提供影響資料庫結構設計的重要資訊。開展訪談前必須指定指南,有助於確保訪談流暢。參與者指南 受訪者指南 訪談室應選取光線充足,遠離噪音的房間,並配備大桌子和舒適的座椅。每次訪談不超過10個人。一些參與者的危機感與參與人數成正比上公升。對於使用者和管理人員分別訪談。主要是因為不同人群對機...
《自己動手設計資料庫》學習筆記系列 第三章 術語
1.關於值的術語 資料 儲存在資料庫中的值就是資料。資料是靜態的。資訊 讓資料在被使用和觀察時變得有意義和有效用。資訊總是在不斷的發生變化,可以用無數種方式對其進行處理和表達,動態的。儲存的是資料,檢索的是資訊。空值 null 乙個null代表乙個缺失或未知的值。null不代表0,也不代表乙個包含乙...