2012-10-08 29 views
0

我目前有一张有IDENTITY字段的表格。该字段被声明为INT类型。问题是我有一些新的独特的价值,但他们不是INT。他们是字母数字,所以我不能把它们放在INT字段中。我唯一的选择是创建另一列,并将它们粘在新的NON-IDENTITY列中,或者有其他选择吗?上面的例子只是针对2种不同的身份格式,但如果我开始获得更多的信息呢?我不想为每种格式化的alpha(数字)创建一个列。如何适应表中不同类型的唯一标识符?

回答

0

表中有多个列也必须是唯一的,这并不罕见。我认为真正的问题是你在这里为什么要进行标准化,并且是否增加了专栏支持或者打破了标准化水平或者你认为可以接受的关系?

例如,考虑第三个正常和/或着名的“每个非关键属性将揭示关键的事实,整个关键,除了关键以外的东西.... 所以帮助我Codd”。

您添加的新唯一值是否添加关于由该键标识的行的事实?

此外,主键通常是聚集索引,但不一定是。您还可以在同一张桌子上设置其他唯一索引,并在 “您要完成什么”的上下文中将其视为“正常”并进行优化。

+0

不,它没有增加价值。一个用户只使用我们创建的数字,另一个用户为我们提供唯一的值,这些值恰好是字母数字值。 – Xaisoft

+0

显然它增加了一个用户依赖的事实,而不是另一个用户。所以,根据您的业务规则和与用户达成的协议,它可能还是很好的。关于数据库设计......“确定”就是你定义的可接受你的情况和约定的服务水平 - 当然除了一些非常糟糕的做法。 – RThomas

+0

在实践中,您在这里的真正斗争可能会让用户相信使用相同的标识符来减少与数据相关的维护和麻烦。 – RThomas

0

另一种方法是:

  1. 创建具有完全相同的方案临时表为您的旧表
  2. 复制你的表到新的临时表
  3. 删除旧表中的值
  4. 根据旧表格的方案创建一个新表格,但使用文本标识
  5. 将数据从临时表格复制到新创建的表格中,其文本标识为
  6. 删除临时表

当然,您必须注意在此过程中对此表的任何潜在操作。

+0

我需要有积分ID和文本ID。 – Xaisoft

+0

然后你的整体ID应该是身份,而另一个,文本字段应该有一个唯一的约束。 –

+0

或者你可以定义一个主键约束,它将包含两个字段,但是你需要一个唯一的约束来保证每个字段的唯一性。 –