Database-Design
我應該拆分這些欄位還是保留一個?
我想創建一個數據庫,列出《冰與火之歌》系列每本書中的人物,列出人物的名字和他們出現的頁面。我可以只使用三個欄位(不包括主鍵)Name、PageIntroduced 和 BookIntroduced,但 Name 欄位不是原子的;我可以細分它很多。一些角色有頭銜(學士、領主、爵士),一些角色有家名(斯塔克、蘭尼斯特、拜拉席恩),還有很多有綽號(公牛、內德、艾瑞),還有很多國王通過王室編號來區分(有五個 Aegon 的!)所以我的表可能如下所示:
CHARACTER ( ForeName HouseName Title NickName RegnalNumber PageIntroduced BookIntroduced )
問題是:這完全是矯枉過正,還是我應該使用包含所有五個屬性的單個“名稱”欄位,即使它不是原子的?我敢肯定它更整潔,尤其是對於“國王伊耿五世”幸運的“坦格利安”,但它會導致很多欄位沒有被使用——很多角色只有一個名字,沒有別的,比如“Rorge”,“咬”和“熱餡餅”。這是數據庫中的問題嗎?數據庫中的欄位是否留空是否重要?
從姓氏中分離名字不是規範化。如果您創建了一系列表,其中包含有關表中某些列的其他詳細資訊,那麼規範化將是什麼。
例如,您可以創建一個
HOUSE
表,其中包含有關房屋的資訊而不是名稱,例如它的流行語或家鄉等。您可以使用TITLE
and執行類似的操作BOOK
。不要擔心你的情況下的空值。有些人擔心空值過多,因為這可能表明您的設計不正確,或者因為他們擔心浪費磁碟空間。在您的情況下,這些擔憂都無關緊要。