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