《自己動手設計資料庫》第10章 建立關係特性

2021-07-24 03:36:20 字數 2782 閱讀 4413

本章就前面介紹術語時介紹的表之間的關係型別、參與度、參與方式進行講解

型別就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,也不代表乙個包含乙...