- Orders 表有一个 CustomerId 列和一个 OrderId 列。
- 由于某些原因,订单的 ID 不超过 2 个字节很重要。
- 总共将有几百万个订单,这使得 2 个字节对于全局订单 ID 来说是不够的。
- 一个客户将有不超过几千个订单,使得 2 字节就足够了。
- 显而易见的解决方案是让 (CustomerId, CustomerOrderNumber) 是唯一的,而不是 OrderId 本身。
问题是生成下一个CustomerOrderId。最好不要为每个客户创建单独的表(即使它只包含一个 IDENTITY 列),以保持解决方案的上层简单。
问:如何生成下一个 OrderId 以使 (CustomerId, CustomerOrderId) 是唯一的,但允许 CustomerOrderNumber 本身有重复?Sql Server 2008 是否具有执行此操作的内置功能?
由于没有更好的术语,我将其称为 Compound IDENTITY 列。