【发布时间】:2011-05-30 08:03:06
【问题描述】:
在我们的数据库中(在 SQL Server 2005 上)我们有一个“客户”表,其主键是客户端代码,一个代理项,bigint IDENTITY(1,1) 键;该表被我们数据库中的许多其他表通过外键引用。
我们估计的新 CR 实现需要我们将 ID 列类型更改为 varchar,客户端代码生成算法从简单的数字级数转换为严格的 2 字符表示,代码范围从 01 到 99,然后进行像这样:
1A -> 2A -> ... -> 9A -> 1B -> ... 9Z
我对数据库设计还很陌生,但我在这里发现了一些严重的问题。首先,这个客户端代码生成算法呢?如果我需要客户代码超过 9Z 代码限制怎么办?
我有一个问题:这个改变是否可行,表已经填充了相当数量的数据,并被多个实体引用?如果是这样,您将如何解决这个问题,以及如何实现客户端代码生成?
【问题讨论】:
-
为什么不为 varchar ID 添加另一列并保持旧列不变??
-
如果您有兴趣,我已经在我的答案中添加了更多信息。如果对您有好处,请不要忘记关闭答案;-)
-
你是对的。新的 CR 实现是 JURASSIC。告诉那些恐龙爬进沥青坑然后灭绝。您不想在主键中嵌入任何有意义的数据;其唯一目的是唯一标识该行。一种折衷方案是添加一个带有唯一索引的新列,以存储时髦的恐龙遗留键。
-
@Tim 不幸的是,恐龙似乎还活着而且很好...... :-)
标签: sql sql-server database sql-server-2005 database-design