我已经阅读了有关规范化,现在希望你问我应该有2个表,它或一个足够。
我有一个这样的对象:
{
"name": "Farbe",
"id": 11087368061250,
"product_id": 8812906250562,
"position": 1,
"values": [
"schwarz",
"gelb",
"blau",
"rot",
"weiß",
"lila"
]
},
{
"name": "Größe",
"id": 11087368061250,
"product_id": 8812906250562,
"position": 1,
"values": [
"22",
"23",
"24",
"25",
"26",
"27"
]
},
我想把它放在我的数据库里,所以我有两个选择。在一张或两张table上。
选项1:
CREATE TABLE product_options (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
p_id UUID REFERENCES product(id),
name VARCHAR,
position SMALLINT,
value VARCHAR
)
备选办法2(有两张table)
CREATE TABLE product_options (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
p_id UUID REFERENCES product(id),
name VARCHAR,
position SMALLINT
)
CREATE TABLE product_options_value (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
produt_options_id UUID REFERENCES product_options(id),
value VARCHAR
)
那么你更喜欢什么,哪一个更好?我希望你能解释我哪一个会更好,因为我是新的sql
1条答案
按热度按时间sg24os4d1#
应该有两件事:属性本身及其所有可能的值(类似于选项2)和产品的实际属性(具有单个值)。我会像这样对前者建模:
与实际产品的关联将是
我选择不向
option_value
添加人工主键,这意味着option_id
和value
都需要在product_option
中。如果value
是一个长字符串,使用一个人工主键可能是更好的方法,以避免重复长字符串。