【问题标题】:SQL Composite Primary KeysSQL 复合主键
【发布时间】:2014-05-25 10:19:44
【问题描述】:

我正在为 Visual Studio 使用 Sql Server。我有两列,1 是自动递增的,另一列不是,但我想让主键和未递增的键都可以用作另一个表中的外键。谢谢

【问题讨论】:

  • 正如你所描述的,它是零意义的。
  • 您想要一个复合键,还是想要两个单独键?

标签: sql-server composite-key


【解决方案1】:

就像 TomTom 说的,你想做什么是没有意义的。 如果第二列(您称为未递增的那一列)已经是唯一的,您可以删除自动递增列,因为它是多余且无用的。

冗余是由于 2 个唯一列聚合在一个键中,这不仅损害了列本身的唯一性,而且它使用 2 个不同的列来描述相同的值!

  id   |   col   |  some_data
-------------------------------
   1   |    A    |
   2   |    B    |
   3   |    D    |

如你所见,如果我想指向一个特定的行,在你所描述的这种情况下,我可以只使用 id 或 col 列,它们都是有效的!

如果相反,未递增的列不是唯一的,则主键应该只是自动递增的列,并且应该在其他表中用作外键。

如果您真的想拥有 2 个不同的列,您拥有的最后一个选项是不将第一个设置为自动增量列。

作为一般规则,自动递增列应始终用作单列键。

【讨论】:

    猜你喜欢
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 2013-10-06
    • 2013-04-30
    • 2017-04-22
    • 2015-02-20
    相关资源
    最近更新 更多