如何为在线商店设计数据库数据模型?

时间:2013-12-17 01:32:06

标签: data-modeling

假设我正在设计亚马逊等产品的在线销售商的数据库数据模型,我有几个选择:

enter image description here

在OrderLine中插入行时,要确定每个OrderLineID:

select max(OrderLineID) + 1 
from OrderDetail 
where OrderID={OrderID}

OrderLineID将包含很好的简单小数字,每行都有很好的编号:

OrderID    OrderLineID
-------    -----------
    100              1
    100              2
    100              3
    etc

enter image description here

选项2:设置列OrderLineID自动增量,而不是选择max()+ 1。
优点 - 无需选择max()+ 1
缺点 - OrderLineID不会有漂亮的小行号,即1,2,3,4等,OrderLineID将有非常大的数字。


enter image description here

选项3:将OrderLineID移至第一列


哪个是最好的数据模型?

2 个答案:

答案 0 :(得分:2)

如果订单行中的相同产品无效,则:
OrderLineID列是多余的,您可以使用{OrderID , ProductID }的组合作为OrderLine表的pk

如果您想使用代理标识符列,让OrderLineID具有增量值,作为唯一的PK列,您可以考虑将{OrderID , ProductID }作为唯一键约束。

答案 1 :(得分:0)

您最好的选择是使用自动增量。或者甚至更好,使用1序列填充数据库中每个表中的每个唯一ID。

为什么呢?将记录插入表中时,您不希望查询表以查找当前ID。这很慢,并且当少数进程尝试同时插入所有进程时最终会出错。序列生成器旨在即使在多用户环境中也能快速返回下一个值。

就个人而言,我喜欢在每个表中使用1个序列生成器作为pk id字段。

真正重要的是每条记录都标有唯一编号。数字是否被跳过并不重要。

确保使用主键/唯一索引强制实现唯一性。