我正在使用产品属性的单表继承(可能是以后的类表继承)模型来实现产品数据库。这一切都很好,但我试图弄清楚如何最好地处理产品变体,同时保持参照完整性。
现在我的主要产品表的简化版本如下所示:
CREATE TABLE product (
id SERIAL NOT NULL,
name VARCHAR(100) NOT NULL,
brand VARCHAR(40) NOT NULL,
color VARCHAR(40)[] NOT NULL
)
(颜色是一个数组,因此可以列出任何给定产品的所有标准颜色)
为了处理变体,我考虑在名为 product_variant_theme 的表中跟踪产品变化的属性:
CREATE TABLE product_variant_theme (
id SERIAL NOT NULL,
product_id INT NOT NULL,
attribute_name VARCHAR(40) NOT NULL
)
其中我插入带有相关product_id 的行,并将属性的列名添加到attribute_name 字段中,例如“颜色”。
现在请随时告诉我这是否是一种完全愚蠢的方法,但我担心attribute_name 和实际列名本身之间缺乏约束。显然,如果更改产品表并删除该列,我可能仍然会在第二个表中留下引用它的行。我正在寻找的功能等价物类似于attribute_name上的外键到描述表的information_schema视图,但我认为没有任何方法可以直接做到这一点,我想知道是否有任何合理的方式来获得这种功能。
谢谢。