我正在为一个电子商务网站设计一个数据库,其中一项要求是应该将订单拆分为多个付款。经过研究(针对良好做法),发现采取以下措施的好方法是:

TABLE订单
    -order_id:(PK)

表格付款
    -order_id:(FK)到订单
    -payments_id:每个order_id自动递增(从1开始)
    (订单ID,付款ID):( PK)


应该看起来像这样:

付款方式
#order_id #payment_id
   1424 1
   1424 2
   1424 3
   1523 1
   1513 1
   1513 2


最好的方法是什么?可以在数据库级别完成吗(如果可以)(因为我是关系数据库的新手)-如何?

更新:
如何自动分配payment_id,以便它跟踪每个order_id的当前付款计数?我可以在应用程序级别执行此操作,但是它将更加昂贵,并且肯定应该有一种在数据库上执行此操作的方法。

最佳答案

尽管您可能认为您希望payment_id是一个很好的连续序列,而且没有间隔,但这不是必需的。您可以只提供付款日期或自动递增的ID,然后将其用于订购。

为什么没有您所描述的专栏?

像这样您很难维护像这样的顺序列。没有内置功能,因此您需要确保:


两次付款同时获得不同的ID。
当事务失败时(是的,确实会发生),则id不会递增。
如果删除或添加了付款(在中间),则会调整所有ID。
如果将数据库回滚到较早的快照,则将适当调整“下一个ID”。


这些条件实质上意味着在桌子上有很多锁。所有这些锁定都会对性能产生重大影响。

自动递增的ID通过允许空白来解决许多此类问题。它也是内置在数据库中的功能,因此您知道它可以工作。

关于mysql - 如何使SQL表列与另一个列序一致,使它们都成为复合PK,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46753894/

10-12 00:16
查看更多