【发布时间】:2015-10-30 07:13:08
【问题描述】:
我有多个表链接,如下所示:
表1
product_id SERIAL NOT NULL,
name varchar,
Table2 (与table1分开,因为产品名称相同但颜色可以不同)
table2_id
product_id integer,
color varchar,
FOREIGN KEY (product_id) REFERENCES table1 (product_id) ON DELETE CASCADE
table3 (与table2分开,因为产品颜色相同,但尺寸可以不同)
table3_id
table2_id integer,
size varchar,
FOREIGN KEY (table2_id) REFERENCES table2 (table2_id) ON DELETE CASCADE
例如,产品数据可能以这样的方式存在:
a chair (name) - red (color) - 100cm(size)
a chair (name) - red (color) - 200cm(size)
b chair (name) - green (color) - 100cm(size)
b chair (name) - green (color) - 200cm(size)
c chair (name) - black (color) - s(size)
c chair (name) - black (color) - m(size)
d chair (name) - black (color) - null(size)
e chair (name) - gold (color) - big(size)
e chair (name) - gold (color) - small(size)
为了规范化表格(即删除重复项),我将它们分成 3 个表格,但我不确定这样的链接是否正确。
【问题讨论】:
-
你正在做的是不是规范化。规范化不会引入新列(例如 ids)。您也没有提供规范化所需的信息(FD 和 JD)。如果 product_ids 是 1:1 且名称在 table1 中,则示例数据表已经 在 5NF 中。所以你有一些误解。我已经解释了这个here(刚刚编辑)。
-
1.您的“因为”不清楚,并且您没有解释每个“因为”与相应表的存在之间的联系。 2. 请说出 a) 您的“产品数据”“表”中的一行在 product_id、名称、颜色和大小方面的表述以及 b) 列的值必须始终与一组不包含它的列的相同子行值。
标签: database database-design relational-database