真實世界中存在各種實體
(Entity),實體與實體間存在某些關係
(Relation)。
歌手和專輯、歌曲和歌詞、皮卡丘和訓練師小智…實體無所不在。
歌手出版了多張專輯,一張專輯內有多首歌曲,一首歌擁有一組歌詞,皮卡丘的訓練師是小智…實體之間總是有某種關係。
如何以資料的概念呈現實體與儲存實體?
利用屬性
來描述與呈現實體的某些特性,如:專輯的名稱、簡介、出版日期和封面圖片…等。歌曲的曲名、長度、性質…等
其中某些屬性存在一些特別的性質,稱為鍵值
(Key)。鍵值可分為幾種:超鍵
、候選鍵
、主鍵
、複合鍵
、外來鍵
。
此外,關係的呈現方式也分為三種:一對一
、一對多
和多對多
為了保持資料的一致性和完整性,避免異動資料時發生異常現象,訂下了三種完整性規則
(Integrity Rules):實體完整性、參考完整性和值域完整性。
稍微整理一下,主要的概念有:
- 鍵值屬性
- 關係的種類
- 完整性規則
鍵值屬性可分為
- 超鍵(Super key)
- 候選鍵(Candidate key)
- 主鍵(Primary key)
- 複合鍵(Composite key)
- 外來鍵(Foreign key)
關係種類可分為
- 一對一關係(one-to-one)
- 一對多關係(one-to-many)
- 多對多關係(many-to-many)
完整性規則可分為
- 實體完整性規則(Entity Integrity Rule)
- 參考完整性規則(Referential Integrity Rule)
- 值域完整性規則(Domain Integrity Rule)
鍵值屬性
在計算機的世界裡,要如何判斷實體之間的差異呢?這輛車和那輛車指的是同一台車還是不同的車呢?
這時必須使用一種屬性來明確地告訴計算機:「阿!這輛車和那輛車真的不是同一輛!」。
使用車輛廠牌如何? Toyata, Ford, Mitsubishi…這看起來不太可行,因為一家車廠生產超過一輛車,假設A車和B車廠牌都是Toyato,計算機會準備掐死你…
使用車輛廠牌加上車輛型號再加上車牌號碼可行嗎? 看起來似乎可行,A車是Toyato的yaris,車牌號碼是ABC-1234;B車是Mazda的CX-5,車牌號碼是EFG-5678。「阿!A車和B車真的不是同一輛!」
等等…屬性太多太難記憶,直接使用車牌號碼OK嗎? A車車牌號碼是ABC-1234,B車是EFG-5678,「阿!A車和B車真的不是同一輛!」,計算機覺得開心。
符合唯一性的屬性組合,這概念即為超鍵。(車輛廠牌, 車輛型號,車牌號碼)是超鍵集合中的一個元素。
幫忙超鍵瘦身,移除屬性組合中的某些屬性後還是有唯一性,這概念即為候選鍵。(車牌號碼)是候選鍵。
「就決定是你了!皮卡丘」,被選到的候選鍵有了另一個名字:主鍵。負責代表這個實體,有著遠大的抱負和責任,絕對不可以重複
也不可以為空
(Null),壓力山大啊!
關係種類
同一款引擎可以安裝在多台車上,一台車同時間只能安裝一款引擎。引擎實體和車實體為一對多關係。
(未完)