如何设计OLTP系统?

时间:2013-12-29 04:46:04

标签: sql database-design

以零售店为例:如果客户在一次交易中共购买了30件商品(不一定是30件不同的商品),如何设计销售表来记录此交易? 是否应该是一行(有一个唯一的交易ID)来记录所购买的每件商品的所有细节,或者我们应该有多行(具有相同的交易ID)来记录在同一交易中购买的每个特定商品?谢谢!

1 个答案:

答案 0 :(得分:1)

如果您认为每件商品的销售都是特定交易,那么进行多笔交易可能只有一个想法,但如果您认为一批商品销售在一个人中被视为单一交易,那么我本人会有三张桌子。

这是一个展示这个的例子。请注意,使用规范化原则最小化冗余总是一个好主意。另请注意,Sold Table中的主键tid,itemid将在此实例中形成超级密钥,因为它们唯一地标识数据库中的记录。

我希望您有超级密钥,主键和外键的基本概念以及关系数据库管理系统如何工作的一般工作方式。顺便说一下,你需要一个更强大的设计才能在现实世界中工作。

交易表

此表格包含tid标识的所有唯一交易的列表。

此外,此表还包含person, time, store, cashier等列。

项目表

此表格包含可供销售的所有项目(itemid)。

此外,此表还包含item name, item quantity, type等列。

已售表

此表格包含tiditemidquantity

通过这种方式,您可以唯一地识别出售哪些交易项目。显然,这适用于关系数据库系统(RDBMS)。有很多方法可以解决这个问题,具体取决于您的设计和需求。

展示最小冗余的示例示例: enter image description here