用多种变体的产品设计数据库的最佳方法是什么



这个问题与这个问题有关:在数据库中存储产品颜色的最佳方法

所以我有一个具有多重属性的乘积。下面是一幅插图。

产品A

Name: Product A v1.0, Product A v2.0 (2 versions of Product A)
Color: Black, White, Blue
Capacity: 16MB, 32MB, 64MB
Carrier: T-Mobile, Digicel, Vonage

此产品只能具有每种属性中的一种。例如:黑色32MB,Vonage产品a v2.0

我不确定如何在规范化数据库中设置此产品。我是否为产品名称、颜色、容量和载体创建单独的表格。。然后在产品a v1.0和Color、产品a v10和Capacity、产品a v1.0和Carrier之间创建一个链接表,依此类推?

我也不确定,因为产品A v1.0只提供16MB黑/白,而v2.0提供所有颜色、所有容量和只有一个蜂窝载波。我可以继续做一些小的变化。

以下是我如何在Oracle中链接产品和颜色的示例(更新后显示如何使用单独的唯一密钥在产品上创建主键):

CREATE TABLE product_color (
    color_name VARCHAR2(100),
    CONSTRAINT color_pk PRIMARY KEY (color_name)
);
CREATE TABLE product (
    product_id NUMBER,
    product_name VARCHAR2(100),
    color_name VARCHAR2(100),
    CONSTRAINT product_pk PRIMARY KEY (product_id),
    CONSTRAINT color_fk FOREIGN KEY (color_name) 
        REFERENCES product_color (color_name),
    CONSTRAINT product_uk UNIQUE (product_name, color_name)
);

这基本上创建了一个值表的外键。如果您试图插入一个不在product_color表中的颜色或无效文本,则约束将阻止它。

现在,我可以将其进一步规范化,并将每种颜色关联一个整数键,并为该整数创建一个外键。但是,这种类型的规范化会导致SQL语句中出现大量联接,尤其是在开始添加其他属性时。我发现这种方法是与更干净的SQL相折衷的好方法。

最新更新