不太确定标题会解释它..
这是我的问题。我有一张代表产品的桌子。这些产品是按月分组的一部分。在结账时,一些产品也可以单独添加到订单中作为"插件"。 例如,订阅A附带一个包含产品1,2,3,3的盒子,但你可以添加任意多的3和4,因为它们也是插件。
我表示此数据的解决方案是拥有一个products
表,然后是一个只存储产品ID的products_addons
表。请参阅下面的布局。
products
id, name, price
products_addons
product_id
这样我可以加入表格,看看哪个产品也是插件,所以
我的id为3和4的示例产品将保存到product_addons
表中。这似乎非常低效,我想知道是否有更好的方法
这个怎么样?我在考虑products
表is_also_addon
中的bool字段,但这似乎效率低下。
答案 0 :(得分:1)
这是一个快速思考,以及我在该链接中对Junction Tables的记录。
-- drop table products;
create table products
( prodId int auto_increment primary key, -- sku, code, whatever
isAssembly int not null, -- bool, whatever, for quick retrieval of just them
descr varchar(255) not null,
price decimal(10,2) not null -- varies here over time, but not in orderLines (frozen there)
);
-- drop table assemblies;
create table assemblies
( -- this assemblies table is to give a description, and to be one of the two anchors to the Junction table
-- but Orders still emanate from the products table
ashId int auto_increment primary key, -- trying to keep the column name clean
descr varchar(255) not null -- 'October Chocolate Package'
);
-- drop table orders;
create table orders
( ordId int auto_increment primary key,
ordDate datetime not null
-- etc customer blah blah blah
);
-- drop table orderLines;
create table orderLines
( id int auto_increment primary key,
ordId int not null,
prodId int not null, -- a product. Period. Can be an assembled product or not
seq int not null,
qty int not null,
price decimal(10,2) not null, -- the frozen price upon placing the order
CONSTRAINT fk_ol_orders FOREIGN KEY (ordId) REFERENCES orders(ordId),
CONSTRAINT fk_ol_products FOREIGN KEY (prodId) REFERENCES products(prodId)
);
-- drop table paJunction;
create table paJunction
( -- product/assembly junction table
-- one row here for each product that is in an assembly
id int auto_increment primary key,
prodId int not null,
ashId int not null,
qty int not null, -- how many prods go in that assembly
unique key(prodId,ashId), -- no dupes allowed
unique key(ashId,prodId), -- no dupes allowed
CONSTRAINT fk_paJ_products FOREIGN KEY (prodId) REFERENCES products(prodId),
CONSTRAINT fk_paJ_assemblies FOREIGN KEY (ashId) REFERENCES assemblies(ashId)
);
通过创建新程序集,可以极大地灵活地对本月的软件包(或程序集)进行逐月调整。并允许重复使用你想要推广的旧版本,只需要很少的努力就可以再次使用。
维持定价历史记录。
允许用户在购物车中放置他们想要的任何内容。
我确信这些装配件需要一些人看到这个视觉效果。我可以把几个例子放在一起。
主要内容是使用Junction表,并从产品表中订购。