设计一个多对多关系的组合的SQL模式(产品的变体)
我希望标题有所帮助.我使用
MySQL作为我的数据库
我正在建立一个产品数据库,不知道如何处理存储价格/产品变化的SKU.产品可能有无限的变化,每种变化组合都有自己的价格/ SKU /等等. 这是我现在有我的产品/变化表设置: PRODUCTS +--------------------------+ | id | name | description | +----+------+--------------+ | 1 | rug | a cool rug | | 2 | cup | a coffee cup | +----+------+--------------+ PRODUCT_VARIANTS +----+------------+----------+-----------+ | id | product_id | variant | value | +----+------------+----------+-----------+ | 1 | 1 | color | red | | 2 | 1 | color | blue | | 3 | 1 | color | green | | 4 | 1 | material | wool | | 5 | 1 | material | polyester | | 6 | 2 | size | small | | 7 | 2 | size | medium | | 8 | 2 | size | large | +----+------------+----------+-----------+ (`products.id` is a foreign key of `product_variants.product_id`) 我创建了一个SQLFiddle这个示例数据:http://sqlfiddle.com/#!2/2264d/1 允许用户输入任何变体名称(product_variants.variant),并可以为其分配任何值(product_variants.value).不应该限制用户可能输入的变化/值的数量. 这就是我的问题出现的地方:存储每个变体的价格/ SKU,而每次有人添加一个以前不存在的变体的产品时,不添加新的表/列. 每个变体可能具有相同的价格,但SKU是每个产品唯一的. 我已经考虑把这些组合作为文本存储,即: +------------+-----------------+-------+------+ | product_id | combination | price | SKU | +------------+-----------------+-------+------+ | 1 | red-wool | 50.00 | A121 | | 1 | red-polyester | 50.00 | A122 | | 1 | blue-wool | 50.00 | A123 | | 1 | blue-polyester | 50.00 | A124 | | 1 | green-wool | 50.00 | A125 | | 1 | green-polyester | 50.00 | A125 | | 2 | small | 4.00 | CD12 | | 2 | medium | 4.00 | CD13 | | 2 | large | 3.50 | CD14 | +------------+-----------------+-------+------+ 但是,必须有一个更好的,归一化的方式来表示这些数据.假设情况:我想要搜索一个小于10美元的蓝色产品.使用上述数据库结构,无法解析文本,这是我想避免的. 任何帮助/建议赞赏=) 解决方法将规范化应用于您的问题,解决方案如同给定.运行并在小提琴上看到它Fiddle CREATE TABLE products ( product_id int auto_increment primary key,name varchar(20),description varchar(30) ); INSERT INTO products (name,description) VALUES ('Rug','A cool rug' ),('Cup','A coffee cup'); create table variants (variant_id int auto_increment primary key,variant varchar(50) ); insert into variants (variant) values ('color'),('material'),('size') ; create table variant_value(value_id int auto_increment primary key,variant_id int,value varchar(50) ); insert into variant_value (variant_id,value) values (1,'red'),(1,'blue'),'green'),(2,'wool'),'polyester'),(3,'small'),'medium'),'large'); create table product_Variants( product_Variants_id int auto_increment primary key,product_id int,productVariantName varchar(50),sku varchar(50),price float ); create table product_details(product_detail_id int auto_increment primary key,product_Variants_id int,value_id int ); insert into product_Variants(product_id,productVariantName,sku,price) values (1,'red-wool','a121',50); insert into product_details(product_Variants_id,value_id) values( 1,1),4); insert into product_Variants(product_id,'red-polyester','a122',value_id) values( 2,5); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |