代码之家  ›  专栏  ›  技术社区  ›  asp8811

是否有理由使用整数主键列而不是Identity列?

  •  0
  • asp8811  · 技术社区  · 9 年前

    我遇到了一个问题,我需要定期将记录插入表中,但整数主键列不是标识列。如果是这样,插入记录并使其自动递增以保持唯一性将很容易。然而,我不能使主键列成为标识列,而不在仍用于完成我所做工作的应用程序中造成错误。有什么原因可以让您想要一个整数主键而不将该列作为标识列?我对这个有点陌生,只是想知道为什么有人会这样构造一个表。

    编辑补充道:我做了一些谷歌搜索和研究,我理解他们的差异和目的,但我找不到你为什么会这样做 希望在这个特定的实例中一起使用它们,甚至以您无法做到的方式创建表/应用程序。

    2 回复  |  直到 9 年前
        1
  •  2
  •   Nikki    7 年前

    对我来说,这似乎是一个糟糕的数据库设计,表应该有一个主键,可以用来搜索和排序,例如用户名作为主键, 没有自动递增的整数主键是糟糕的设计

        2
  •  1
  •   Community CDub    8 年前

    是否有理由使用整数主键列而不是Identity列?

    如果您所说的“标识”是指(自动递增为)代理项,即组成DBMS,那么是:

    -- ticket #N is held by person P
    lotto(N, P) -- PK(N)
    

    surrogate 只是DBMS任意选取的东西的名称/标识符(日常意义上的“标识”),例如用户“3508218”,而不是“asp8811”、“eight-eight”或“Texas”。请注意 他们

    PK/UNIQUE只是表示列集合的子行值在表中是唯一的。此处N 有一个“含义”,即DBMS无法控制物品的名称/标识符。事实上,如果一张票只能由一个人持有,那么P也是一个候选键(PK/UNIQUE),无论名字/标识人的值(无论是什么类型)是否是一个代理。

    每一个 PK/独特 或超集 在里面 每个基表;查询结果 命名/识别 一些 友善的也就是说,在任何类型上设置的任何列都可以命名/识别事物(1:1或M:1),无论它是否是候选键(PK/UNIQUE)。因此,整数(和任何其他类型或类型集)主键(和UNIQUE)列(和列集)(和父集)是 到处都是 命名/标识而不是代理项,以及它们是否是候选键。