我目前正在建设一个B2B电子商务网站。目前,我被困在确定一个特定项目的客户的特殊价格。
我有两张桌子:
顾客对某些产品可以有特别的价格。比如:
A项(费用10美元(违约价格))顾客A获得A项折扣(客户A需7美元)
我心里想的只是一张中间的桌子(顾客(FK),商品(FK),特价)。
这会是一个好的做法吗?
谢谢!
发布于 2020-07-16 22:57:28
您在客户和项目之间有多到多的关系,其中客户可能会受益于0到N项商品的特殊价格,而一项项目可以以特殊价格提供给0到N项客户。
正如您已经猜到的,表示这种关系的正确方法是创建一个单独的表,称为桥表,该表通过外键引用两个其他表。Customer/item元组在桥接表中必须是唯一的(执行此操作的一个简单方法是使列元组成为表的主键)。
ddl样本:
create table customers (
customer_id int primary key,
name varchar(50),
-- other relevant columns here
);
create table items (
item_id int primary key,
price decimal(10, 3),
-- other columns here
);
create table customer_items (
customer_id int references customers(customer_id),
item_id int references items(item_id),
price decimal(10, 3),
primary key (customer_id, item_id)
);现在,假设您想检索给定客户的给定商品的价格,您可以这样做:
select coalesce(ci.price, i.price) price
from items i
left join customer_items ci
on ci.item_id = i.item_id
and ci.customer_id = :customer_id
where i.item_id = :item_id..。其中:customer_id和:item_id代表相关的客户和项目。
https://stackoverflow.com/questions/62944628
复制相似问题