首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >B2B电子商务客户专用价格数据库设计

B2B电子商务客户专用价格数据库设计
EN

Stack Overflow用户
提问于 2020-07-16 22:51:29
回答 1查看 132关注 0票数 0

我目前正在建设一个B2B电子商务网站。目前,我被困在确定一个特定项目的客户的特殊价格。

我有两张桌子:

  • Customer (定期客户详细信息,如名称、密码等)
  • 项目(列出默认价格)

顾客对某些产品可以有特别的价格。比如:

A项(费用10美元(违约价格))顾客A获得A项折扣(客户A需7美元)

我心里想的只是一张中间的桌子(顾客(FK),商品(FK),特价)。

这会是一个好的做法吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-07-16 22:57:28

您在客户和项目之间有多到多的关系,其中客户可能会受益于0到N项商品的特殊价格,而一项项目可以以特殊价格提供给0到N项客户。

正如您已经猜到的,表示这种关系的正确方法是创建一个单独的表,称为桥表,该表通过外键引用两个其他表。Customer/item元组在桥接表中必须是唯一的(执行此操作的一个简单方法是使列元组成为表的主键)。

ddl样本:

代码语言:javascript
复制
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)
);

现在,假设您想检索给定客户的给定商品的价格,您可以这样做:

代码语言:javascript
复制
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代表相关的客户和项目。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62944628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档