【发布时间】:2011-01-31 21:30:26
【问题描述】:
- Orders 表有一个 CustomerId 列和一个 OrderId 列。
- 出于某些原因,重要订单的 ID 不超过 2 个字节。
- 总共会有几百万个订单,这使得 2 字节不足以容纳一个全局订单 ID。
- 一个客户的订单不会超过几千个,2 字节就足够了。
- 显而易见的解决方案是让 (CustomerId, CustomerOrderNumber) 是唯一的,而不是 OrderId 本身。
问题正在生成下一个 CustomerOrderId。最好不要为每个客户创建单独的表(即使它只包含一个 IDENTITY 列),以保持解决方案的上层简单。
问:如何生成下一个 OrderId 以便 (CustomerId, CustomerOrderId) 是唯一的,但允许 CustomerOrderNumber 本身有重复? Sql Server 2008 是否具有执行此操作的内置功能?
由于没有更好的术语,我将其称为复合 IDENTITY 列。
【问题讨论】:
-
OrderID命名为CustomerOrderNumber可能更好,因为它不会单独识别单个订单。 -
@OrbMan:你是对的。我已经改了。
标签: sql tsql sql-server-2008 identity identity-column