对表列名的约束(postgresql)

时间:2012-06-12 16:38:45

标签: sql database postgresql database-design constraints

我正在使用产品属性的单表继承(可能是以后的类表继承)模型实现产品数据库。这一切都很好,但我正在努力弄清楚如何最好地处理产品变体,同时保持参照完整性。

现在我的主要产品表的简化版本如下所示:

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和实际列名本身之间缺少约束。显然,如果更改产品表并删除该列,我可能仍会在第二个表中留下引用它的行。我正在寻找的功能相当于在描述表的information_schema视图的attribute_name上的外键,但我认为没有任何方法直接这样做,我想知道是否有任何合理的方式来获得这种功能。

感谢。

1 个答案:

答案 0 :(得分:1)

你在找这样的东西吗?

product
=======
id
name


attribute
=========
id
name


product_attribute_map
=====================
product_id
attribute_id
value