本篇我想深入探討資料建模的基石-實體、屬性和關係。我們會先聚焦在它們本身和其用途,再來才是套用在它們身上的規則和限制。那些規則和限制代表了現實世界的商業規則(Business Rules)。
Let’s get started.
實體
我們可以將實體(Entity)視為"現實世界中的主體(real-world subject)"或是"屬性的集合(collection of attributes)"。事實上,加入特定的屬性並讓它們屬於實體就是能為實體增添細節的其中一種方法。需要注意的是,在判斷何者為實體,何者為屬性時是存在一定程度的主觀性的(灰色地帶),所以我們必須在建模的過程中時時檢視它們的正確性。
實體vs.資料表
它們非常的接近但不完全相同:
- 有些時候資料庫裡的資料表是人造的,不能直接對應到現實世界中的主體;這種表格不一定代表部份的實體,而是代表不同實體間的交會(intersection)
- 資料庫內有些時候會為了可讀性和方便性,儲存或利用重複的資料,如總和計算、平均等等。這種時候我們就會有一個以上的表格對應到同一個實體
如何在模型中表示實體
兩種不同的註記法都會使用長方形代表實體。要注意這裡長方形的四個角一定要為直角而不是圓角。我們會用直角代表強實體(strong entity;也作真實體real entity)而弱實體(weak entity)則是用圓角代表。我們會在之後的篇幅提到兩者的差別。
兩種註記法的相同處僅止於此。Classic ER註記法會將實體名稱紀錄在長方形的正中心,而Crow’s Foot註記法則會紀錄在長方形的正上方。
屬性
將屬性視為"資料欄位(data field)"是一個看待屬性的好切入點。屬性的作用在於展開實體的細節,幫助我們理解現實世界主體裡到底包含什麼。常見的屬性有像是姓名、出生日期、地址、年齡等等。
Crow’s Foot註記法會將屬性放在長方形內:獨一無二的識別屬性(主鍵Primary Key)放在上面的格子裡,其他屬性則放在下面的格子裡。而Classic ER註記法會用圓圈或橢圓代表屬性並在其正中間寫上屬型名稱;如在屬性名稱下畫上底線則代表被標記的屬性為主鍵。
屬定的描述&規則
設計屬性時我們要考慮:
- 資料類型(data type)和大小(data size)
- 是否能為NULL
- 允許值(permissible values)
- 範圍(attribute domains)
- 小心地分解(decompose)資料
我們可以藉由參考樣本或真實資料來減少屬性設計(有關套用限制、該不該資料分解和如何資料分解)時遇到的各種問題。 之後的篇幅會再提到以上反映現實世界的屬性限制。
多值屬性
多值屬性(MVA Multi-Valued Attributes)是一種特殊的屬性。