依赖于另一个值的值的数据库架构
Database schema for values that are dependent on another value
我想做的是将此数据输入数据库以用于用户表单。
例如,如果用户在产品下拉列表中选择产品 A,则样式下拉列表将仅填充适用于产品 A 的样式,并选择默认样式。颜色下拉列表只会显示与该样式对应的颜色。所以基本上我在这里拥有的是依赖于另一个值的值。颜色列表取决于样式,样式又取决于产品类型。
这个场景的合理数据库模式是什么?我已经绞尽脑汁好几天了,非常感谢您的指导。
产品类型(A、B、C、D、E)
产品 A 和 B
有以下款式:
样式 1
样式 2(默认)
样式 3
产品 C 和 D
有以下款式:
样式 4(默认)
样式 5
产品 E
只有一种款式:
样式 6
样式 7(默认)
注意:每个样式都有自己独特的一组颜色
注意:每个产品都有一个默认样式
如果你想让事情简单化:
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) 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.
这是逻辑设计,您应该可以将其直接翻译成 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_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}
我想做的是将此数据输入数据库以用于用户表单。
例如,如果用户在产品下拉列表中选择产品 A,则样式下拉列表将仅填充适用于产品 A 的样式,并选择默认样式。颜色下拉列表只会显示与该样式对应的颜色。所以基本上我在这里拥有的是依赖于另一个值的值。颜色列表取决于样式,样式又取决于产品类型。
这个场景的合理数据库模式是什么?我已经绞尽脑汁好几天了,非常感谢您的指导。
产品类型(A、B、C、D、E)
产品 A 和 B
有以下款式:
样式 1
样式 2(默认)
样式 3
产品 C 和 D
有以下款式:
样式 4(默认)
样式 5
产品 E
只有一种款式:
样式 6
样式 7(默认)
注意:每个样式都有自己独特的一组颜色
注意:每个产品都有一个默认样式
如果你想让事情简单化:
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) 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.
这是逻辑设计,您应该可以将其直接翻译成 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_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}