Sql 如何设计OLTP系统?
以零售店为例:如果客户在一笔交易中总共购买了30件商品(不一定是30种不同的商品),如何设计销售表来记录此笔交易?Sql 如何设计OLTP系统?,sql,database-design,Sql,Database Design,以零售店为例:如果客户在一笔交易中总共购买了30件商品(不一定是30种不同的商品),如何设计销售表来记录此笔交易? 应该是一行(具有一个唯一的交易ID)来记录每个购买项目的所有详细信息,还是应该有多行(具有相同的交易ID)来记录在同一交易中购买的每个特定项目?谢谢
应该是一行(具有一个唯一的交易ID)来记录每个购买项目的所有详细信息,还是应该有多行(具有相同的交易ID)来记录在同一交易中购买的每个特定项目?谢谢如果你认为一个项目的每一个销售都是一个特定的交易,那么拥有多个交易可以是一个想法,但是如果你认为一个项目销售一个一个的人被认为是一个单一的交易,那么我个人将有三个表。 这里有一个例子来说明这一点。请注意,使用规范化原则最小化冗余总是一个好主意。还请注意,在本例中,Sald表中的主键
tid,itemid
将形成一个超级键,因为它们唯一地标识数据库中的记录
我希望您对超级键、主键和外键有一个基本概念,并了解关系数据库管理系统的工作原理。顺便说一句,您需要一个更健壮的设计,才能在现实世界中工作
交易表
此表将列出由tid
标识的所有唯一交易
此外,此表还将包含人员、时间、商店、出纳等列
项目表
此表将列出所有可供销售的项目(itemid
)
此外,此表还将包含项目名称、项目数量、类型等列
售出表格
此表将包含tid
、itemid
和数量
通过这种方式,您可以唯一地标识哪些交易卖出了哪些项目。显然,这是针对关系数据库系统(RDBMS)的。根据您的设计和需求,有很多方法可以实现这一点
显示最小冗余的示例:
嘿,我已经写下了我的答案。说出你的想法。非常感谢阿里!这太棒了。你提出的情景正是我想要的。另一个问题:如何处理退货。我假设在以前的交易中返回一些购买的物品将有一个与之关联的不同的交易ID。如果是这种情况,如何将这两项交易联系在一起?我们是否应该在两个不同的表中分别购买(在您的示例中出售)和退货,并使用外键将它们链接在一起?再次感谢!我希望你们能投票并选择作为解决方案。对于任何其他问题,请打开一个新的SO帖子。不客气,伙计。