我想创建一个数据库,列出冰与火之歌系列每本书中的人物,列出人物的名字和他们出现的页面。我可以只使用三个字段(不包括主键)Name、PageIntroduced 和 BookIntroduced,但 Name 字段不是原子的;我可以将它细分很多。有些角色有头衔(Maester、Lord、Ser),有些角色有姓氏(Stark、Lannister、Baratheon),很多角色有昵称(Bull、Ned、Arry,)并且有相当多的国王以君主编号区分(有五个 Aegon 的!)所以我的表格可能如下所示:
CHARACTER (
ForeName
HouseName
Title
NickName
RegnalNumber
PageIntroduced
BookIntroduced
)
问题是:这是完全矫枉过正,还是我应该使用包含所有五个属性的单个“名称”字段,即使它是非原子的?我敢肯定它更整洁,尤其是对于“King Aegon V “幸运的”Targaryen”,但这会导致很多字段未被使用 - 许多角色只有一个名字,没有别的,例如“Rorge”,“ Biter”和“热派”。这是数据库中的问题吗?数据库中的字段留空是否重要?
从姓氏中拆分名字不是规范化。如果您创建了一系列表,其中包含有关表中某些列的其他详细信息,那么规范化将是什么。
例如,您可以创建一个
HOUSE
表,其中包含除名称之外的有关房屋的信息,例如它的流行语或家乡等。您可以使用TITLE
和做类似的事情BOOK
。不要担心你的情况下的空值。有些人担心空值太多,因为这可能表明您的设计不正确,或者因为他们担心浪费磁盘空间。在您的情况下,这些问题都无关紧要。