database,

深入了解關聯式資料模型(Relational Data Model)

Champion Champion Follow Mar 19, 2021 · 1 min read
深入了解關聯式資料模型(Relational Data Model)
Share this

最近在學校修了一堂資料庫管理的課,讀著讀著原文書,想消化自己所吸收的知識並且分享給大家 ,這次我們要介紹關聯式資料模型(Relational Data Model)的基本概念

所謂的關聯式資料模型是很多個關聯表(relations)組合而成的,就像(圖一)學生和課程兩個關連表就可以組成一個關聯式資料模型,在正式的關聯式資料模型的名詞中,一列(row)稱為一個值組(tuple),一欄的標題(column header)稱為屬性(attribute),而一張表(table)稱為一個關聯表(relation),而定義域(domains)則代表屬性值的範圍,接下來我會分別介紹這些名詞的性質:


(圖一)

Domains:

首先先來說定義域D(domains),定義域是很多個基元值(atomic values)的集合,什麼是基元值呢?基元值簡單來說就是值不能再分割了,再分割就會使值沒有意義,舉例來說:{電話號碼:0912345678}我們若把它分割成09123和45678就會變得沒有意義,通常我們會為定義域取名並說明資料的型態,電話號碼就是定義域的名字,而我們限制電話號碼只能有10位數則是我們的資料型態。

Relation Schema:

關聯表綱要(relation schema)是由關聯表名稱R(relation name)和一連串屬性(A1,A2,….,An)清單(list)還有定義域所組成。

記為R(A1,A2,….,An),主要用來描述關聯表的性質,而我們會使用dom(Ai)的符號來說明屬性Ai的定義域的範圍是什麼,關聯表的維度(degree)則是關聯表中屬性的數量。

關聯表綱要中還有一項關聯表狀態(relation){t1,t2,…,tn},而n個基元值t則是n個值的有序清單t=<v1,v2,…,vn>,1≦i≦n,每個值都是dom(Ai)所定義的值域的集合或者是Null值,而t[Ai]則代表基元值的第i個值對應到屬性Ai,常常會有人說關聯表綱要R是relation intension,而關聯表狀態則是relation extension,兩者一靜一動,關聯表狀態可能因需求而改變,但是關聯表綱要並不會時常去變動。

r(R)在數學上和定義域關係的定義則是如下:

\[r(R) \subseteq (dom(A1) \times dom(A2) \times …. \times dom(An))\]

r(R)是包含於這n個定義域笛卡爾積的集合,比如說 : (圖一)dom(名字)={金城武,田馥甄},dom(班級)={205,206}

笛卡爾積則是dom(名字)×dom(班級)={{金城武,205},{金城武,206},{田馥甄,205},{田馥甄,206}},r(R)則是包含於這四個元素的集合

我再次使用(圖一)這個例子來說明上面的名詞,學生和課程就是關聯表的名稱R,名字、學號、班級、主修….則是關聯表中的屬性,dom(班級)=班級命名規則,班級命名規則是我們事先定義的,比如說:限制三位數的整數,學生和課程兩個關聯表都有四個屬性,所以維度是4

那順序重要嗎?

對於基元值本身來說並不重要但是對於基元值裡的值是重要的,因為我前面有說關連表是很多基元值集合,而集合在數學上的定義則是沒有順序的,因此對於關聯表中基元值的順序是不重要的,就像(圖二)和(圖一)雖然順序改變了但是對關聯式資料模型來說是一樣的


(圖二)

但是基元值內的值卻是有順序的,前面我們提到n個基元值t則是n個值的有序清單所組成,如果我們想要讓基元值內的值變得沒有順序,就必須更改一些定義,修改如下:

\[R={A1,A2,….,An}不再是一個清單而是一個集合\] \[D=dom(A1) \cup dom(A2) \cup…. \cup dom(An)從笛卡爾積換成聯集\] \[r={t1,t2,…,tn}每個基元值都是從R映射(mapping)到D\]

舉例來說:t=<(姓名,田馥甄),(學號,23456),(班級,205),(主修,經濟)>

               t=<(學號,23456),(姓名,田馥甄),(班級,205),(主修,經濟)>

在這定義下這兩個基元值是沒有差別的,基元值可以視為(<屬性,<值>)的集合,因此沒有順序關係

探討基元值裡的值:

有人會問說可不可以同時存在兩個以上的值也就是複合值(composite value),答案是不行的,因為在關聯式資料模型中只可以存在基元值,所以也常常被稱為扁平關聯式模型(flat relational model),但是又會有人說那我有多個值那要怎麼放,那就必須建好幾個關聯表把值個別存放在連結起來,比如說(圖三)在主修的欄位上田馥甄同時修了資工和電機,這時就違反了定義,解決辦法可以是多新增一個雙主修的關聯表,讓電機的值移過去。


(圖三)

資料表中也有可能有Null值,Null值的存在是一個很重要的議題,Null值可能會有很多種可能,有可能是本來就不知道,或者是值存在但是遺失了,亦或者值未被定義(不再定義域裡),在資料庫設計裡會盡量避免有Null值的出現。

模型的限制:

常見的模型限制有三種:

1.內顯限制(implicit constraint):資料模型中本來就存在的限制,比如說我們前面提到的不能同時存在兩個值就是一種內顯限制

2.外顯限制(explict constraint):可以用資料庫的綱要也就是架構來表達的限制

3.基於應用或者是商業上的限制(application-based or business rule):這種限制很難透過資料模型的架構去表達,通常要透過寫程式來進行限制

接下來我們要介紹的是第二類的限制,總共有四種

1.Domain constaint:每個值都必須是基元值且必須在定義域內

2.key constraint:每個在資料表中的值組(tuple)都是獨一無二的,不會有重複的情況發生,白話的說就是每個屬性組合起來不能完全一樣

以符號表示:t1[SK]≠t2[SK],其中的SK的意思是super key,super key指的是兩個以上的屬性所組成的key,而key則是由一種屬性組成的key,所以key又被稱為minimal super key,注意key可以被稱做super key,但是super key不能說是key,除此之外,還另外定義了一種key–candicate key,這是什麼用的呢?通常我們在資料表中會有超過一種key,此時每一個key都是candicate key,我們就可以選任一個當資料表的primary key。

3.entity integrity constraint:主鍵(primary key)不可以是Null,因為當我們要參考其他資料表的時候,沒有主鍵沒辦法去搜尋其他資料表中關於這筆沒有主鍵的資料的資訊

4.referential intergrity constraint:當一個資料表要參考另外一個資料表的時候,被參考的資料表必須有資料可以給參考的資料表參考

若以符號來表示,首先要定義何謂外鍵(foreign key)?

外鍵:連結表與表之間的鍵,看下圖,圖中的黑線就是連接資料表之間的外鍵,foreign也可以參考自己,

例如:EMPOYEE和EMPLOYEE_1以符號表示:D(FK)=D(PK),資料表一的外鍵的定義域和資料表二的主鍵的資料表要相同

                       t1[FK]=t2[PK] or t1[FK]是NULL,資料表一參考的值資料表二要存在


(圖四)

以上是第二類的限制,而第三類的限制則有semantic integrity constraints,主要是根據需求提出的限制,比如說:找出公司薪水大於4000的員工

接下來我們要討論在操作資料庫的動作分別會違反哪些限制

1.Insert:第二類四種限制皆違反,當違反限制的時候資料庫會預設拒絕insert

a. 當插入的值不在定義域里時→違反domain constraint

b. 當插入的值的key已經存在本來的資料表裡的時候→違反key constraint

c. 當插入的值的主鍵為NULL時→違反integrity constraint

d. 當插入的值的外鍵無法在被參考的資料表中找到相關的資料→違反referential constraint

2.Delete:只違反referential integrity,因為在刪除的時候,如果刪除的資料為被參考的資料,參考的資料就會參考不到,違反的時候有幾種解決的辦法

a.直接拒絕Delete

b.連鎖刪除(cascade):直接將參考資料和被參考資料通通刪除

c.設成NULL:將參考資料設成NULL或者改變參考對象,但是當參考對象為主鍵時是不能設成NULL,不然又會違反integrity constraint

3.Update:第二類四種限制皆也可能違反,跟Insert一樣,通常不是Update主鍵或外鍵就不會發生問題

關於關聯式資料模型的介紹就到這,下次還會介紹更多關於資料庫的觀念!!!喜歡我的文章可以幫我拍拍手哦~~~

Join Newsletter
Get the latest news right in your inbox. We never spam!
Champion
Written by Champion Follow
Hi, I am Champion, the author of CHAMPION.AI, I will share some AI and investment articles. I hope you like it.