依赖于另一个值

时间:2016-08-29 15:41:42

标签: sql database-design dependencies database-schema

我要做的是将此数据输入数据库以便在用户表单上使用。

例如,如果用户在“产品”下拉列表中选择“产品A”,则“样式”下拉列表将仅填充产品A可用的样式,并将选择默认样式。并且颜色下拉列表仅显示与该样式对应的颜色。基本上我所拥有的是依赖于另一个值的值。颜色列表取决于样式,具体取决于产品类型。

此方案的合理数据库架构是什么?我现在已经绞尽脑汁好几天了,非常感谢一些指导。

产品类型(A,B,C,D,E)

产品A&乙

有以下样式:

风格1

样式2(默认)

Style 3

产品C& d

有以下样式:

样式4(默认)

Style 5

产品E

只有一种风格:

风格6

样式7(默认)

注意:每种风格都有自己独特的颜色

注意:每个产品都有默认样式

3 个答案:

答案 0 :(得分:0)

如果你想保持简单:

CREATE TABLE products (
    id serial NOT NULL,
    CONSTRAINT pk_products
        PRIMARY KEY (id)
);
CREATE TABLE styles (
    id serial NOT NULL,
    product_id integer NOT NULL,
    CONSTRAINT pk_styles
        PRIMARY KEY (id),
    CONSTRAINT fk_styles_id 
        FOREIGN KEY (product_id)
        REFERENCES products (id) MATCH SIMPLE
        ON UPDATE CASCADE ON DELETE CASCADE
);
CREATE TABLE colors (
    id serial NOT NULL,
    style_id integer NOT NULL,
    CONSTRAINT pk_colors
        PRIMARY KEY (id),
    CONSTRAINT fk_colors_id 
        FOREIGN KEY (style_id)
        REFERENCES styles (id) MATCH SIMPLE
        ON UPDATE CASCADE ON DELETE CASCADE
);

如果你想让它更复杂,你可以尝试避免重复(即重复使用颜色等),但这完全取决于你。

答案 1 :(得分:0)

考虑以下数据库架构:

1)Table_Product:Product_ID,Product_Name(所有产品列表)。

2)Table_Style:Style_ID,Style_Name(所有样式的列表)

3)Table_Color:Color_ID,Color_Name(所有颜色的列表)

4)Table_Product_Style:Product_ID,Style_ID,IsDefault(每个产品的默认样式的产品和样式的映射)

5)Table_Style_Color:Style_ID,Color_ID(样式和颜色的映射)

6)Table_User_Preference:User_ID,Product_ID,Style_ID,Color_ID。

答案 2 :(得分:0)

这是逻辑设计,你应该能够将它直接翻译成SQL方言。

请注意,此处的所有内容均为非空。

产品(PROD_NAME)存在。

Product {PROD_NAME}
    KEY {PROD_NAME}


样式(STYLE_NO)存在。

Style {STYLE_NO}
  KEY {STYLE_NO}


颜色(CLR_NAME)存在。

Colour {CLR_NAME}
  KEY  {CLR_NAME}


Style(STYLE_NO)有彩色(CLR_NAME)。

对于每种样式,该样式可以使用多种颜色。 对于每种颜色,可能有多种样式可用于该颜色。

如果某个样式有颜色,则该样式必须存在且该颜色必须存在。

StyleColour {STYLE_NO, CLR_NAME}
        KEY {STYLE_NO, CLR_NAME}

FOREIGN KEY {STYLE_NO} REFERENCES Style  {STYLE_NO}
FOREIGN KEY {CLR_NAME} REFERENCES Colour {CLR_NAME}


产品(PROD_NAME)有样式(STYLE_NO)。

对于每种产品,该产品可以以多种方式提供。对于每种样式,可能有多种产品可用于该样式。

如果某个产品的样式可用,则该产品必须存在且该样式必须存在。

ProductStyle {PROD_NAME, STYLE_NO}
         KEY {PROD_NAME, STYLE_NO}

FOREIGN KEY {PROD_NAME} REFERENCES Product {PROD_NAME}
FOREIGN KEY {STYLE_NO}  REFERENCES Style   {STYLE_NO}


样式(STYLE_NO)是产品(PROD_NAME)的默认设置

每个产品最多只有一种默认样式;对于每种样式,可能有多个产品默认使用该样式。

如果产品的默认设置是该产品,则该产品必须以该样式提供。

DefaultProductStyle {PROD_NAME, STYLE_NO}
                KEY {PROD_NAME} 

FOREIGN KEY {PROD_NAME, STYLE_NO}  REFERENCES ProductStyle {PROD_NAME, STYLE_NO}

enter image description here