【发布时间】:2019-09-20 10:00:26
【问题描述】:
背景信息
所以这是这个问题的背景。目前我们有多个物料清单编号标识符(UNPN、UDEN、UXXN 等),每个都有自己的序列号(UNPN0001、UNPN0002、UNPN0003 等)
当用户请求新的物料清单编号时,假设是一个新的 UNPN 编号。如果最后一个数字是 UNPN0003,那么用户应该能够保留 UNPN0004。
我的初步想法:
所以最初我想,我可以简单地在表中创建一个序列列。因此,如果我们有一个 UNPN 表,我们可以轻松地添加一条新记录并自动对其进行排序,并返回 UNPN + Generated Sequence number 的组合。
问题:
所以我发现的问题是,对于这种方法,我们目前有 50 多个不同的物料清单标识符。所以这意味着我必须为每个标识符创建一个表,并使用它自己的自动序列列。
我在寻找什么:
我宁愿避免创建 50 多个不同的表。我不确定我是否可以为我的数据库使用不同的模式,或者我是否应该放弃这个方法来做别的事情。我不相信您可以在一个表中拥有多个序列列,这些列仅基于输入的内容进行排序,当然我不完全了解所有可能的情况
任何建议将不胜感激。
谢谢,
【问题讨论】:
-
您的插入频率如何?你想确保你得到正确的 ACID 东西,但你可以考虑的一件事是只拥有一个包含每种账单类型的行和最新序列号的表——当你进行插入时,只需使用该序列号和为特定的账单类型增加它。
-
创建一个表来保存账单和序列,因此对于每个请求,获取该账单增量的最后一个序列并存储回来
-
感谢您的建议。我已经考虑过这一点,我宁愿避免自己增加价值。如果同时发出两个请求,则存在重复的可能性。我更喜欢数据库增加序列本身。 @Slothario
-
如果您编写了一个可以为您执行插入操作的存储过程怎么办?您可以为每种可能的订单类型创建一个序列,而您不必自己维护任何类型的计数。
-
如果您试图为每个 BOM 代码实现“无间隙”编号(或任何用途的无间隙编号),那么您就大错特错了。自动增量列只是一种自动将列与序列联系起来的方法。而甲骨文从不保证无间隙序列。如果您尝试编写自己的创建序列的方法,您将遇到相同的固有多用户问题,从而阻止 oracle 保证无间隙序列。
标签: c# sql asp.net sql-server entity-framework