自我参考

时间:2016-10-05 05:39:56

标签: database-normalization self-referencing-table

对于我正在进行的评估任务,实体相册具有属性also_bought,这是一个自引用属性。但是,这一个属性对于任何一个专辑都有多个条目 - 因为also_bought建议很少只是一个推荐 - 因此,当涉及到规范化时,这是一个问号。我不确定它是否通过1NF。

要清楚,整个实体的集合是

专辑(album_id,title,playtime,genre,release_date,price,also_bought)

2 个答案:

答案 0 :(得分:0)

"还买了#34;项目应存储在单独的表格中,例如。

AlsoBought (table)
  album_id
  also_bought_album_id

然后从两列配置外键以引用Album.album_id。

答案 1 :(得分:0)

您的意思是相册是“自引用”,因为它在同一个表中有一个列列表到另一个列列表的FK(外键)? (当列列表的子行值必须出现在别处时,FK约束成立。)如果你的意思是all_bought的类型是album_ids的列表,那么从前者到后者没有FK,因为前者的值(列表的ids)不是后者(ids)的值。有一个约束提醒你FK。

无论如何,对一个表进行标准化,并且不依赖于FK。

但是,只要你"normalizing to 1NF" eliminating "non-atomic columns",你就必须先决定你的“表”“列”包含什么。如果您确定某行中某列的单元格包含“多个值”,那么您没有关系表,您必须提供一个。最简单的方法是假设一个集值列来获得关系,然后遵循standard rules for elimination of too-complex column types