【发布时间】:2014-05-25 10:19:44
【问题描述】:
我正在为 Visual Studio 使用 Sql Server。我有两列,1 是自动递增的,另一列不是,但我想让主键和未递增的键都可以用作另一个表中的外键。谢谢
【问题讨论】:
-
正如你所描述的,它是零意义的。
-
您想要一个复合键,还是想要两个单独键?
我正在为 Visual Studio 使用 Sql Server。我有两列,1 是自动递增的,另一列不是,但我想让主键和未递增的键都可以用作另一个表中的外键。谢谢
【问题讨论】:
就像 TomTom 说的,你想做什么是没有意义的。 如果第二列(您称为未递增的那一列)已经是唯一的,您可以删除自动递增列,因为它是多余且无用的。
冗余是由于 2 个唯一列聚合在一个键中,这不仅损害了列本身的唯一性,而且它使用 2 个不同的列来描述相同的值!
id | col | some_data
-------------------------------
1 | A |
2 | B |
3 | D |
如你所见,如果我想指向一个特定的行,在你所描述的这种情况下,我可以只使用 id 或 col 列,它们都是有效的!
如果相反,未递增的列不是唯一的,则主键应该只是自动递增的列,并且应该在其他表中用作外键。
如果您真的想拥有 2 个不同的列,您拥有的最后一个选项是不将第一个设置为自动增量列。
作为一般规则,自动递增列应始终用作单列键。
【讨论】: