繁体   English   中英

设计具有多个变体的产品的数据库的最佳方法是什么?

[英]Whats the best way to design a database with a product of multiple variations?

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

所以我有一个具有多个属性的产品。 下面是一个插图。

产品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和颜色,产品A v1.0和容量,产品A v1.0和载体等之间创建链接表?

我也不确定,因为产品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很好的折衷方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM