是否始终需要ID列?

时间:2014-05-27 09:46:28

标签: sql sql-server database

我创建了一个表名customers,其中包含以下列:

Id,
CustomerId,
CustomerName,
Phone,
Address

在我的方案中,CustomerId是主键,但CustomerId中的值不是有序的。

我看到很多人使用自动递增的' Id'作为主键,但在我的情况下,它不会是它,它将毫无用处。

' Id'每个表中必需的列(自动递增)?

5 个答案:

答案 0 :(得分:1)

Id列(自动增量与否)通常用于区分它们之间的行。换句话说,在许多情况下,它可以用作主键。

如果你想在它们之间建立关系并构造内连接等,它也可以用作其他表的外键。

答案 1 :(得分:1)

你读得很好,但是在第2列第1列中你错了的是自动递增而第二列是主要的。

通常,根据数据库创建标准或数据库的规范化形式,您必须使用主键列创建自动增量ID,该列用作另一个表的引用。

因此不需要2列,只使用一个具有适当名称和功能/角色的列。永远不要创建你从未使用的额外列。

这是一篇很好的文章,供您对主键的基本了解。

http://www.w3schools.com/sql/sql_primarykey.asp

此链接显示了我们需要主键的原因: -

主键约束是一种约定,表示声明的列(或列列表)构成键。(非常好的文章)参考下面的链接。

http://social.msdn.microsoft.com/Forums/sqlserver/en-US/376d565a-f16d-4ae4-afeb-ef2ef78dc4af/why-do-we-need-primary-key-in-a-database?forum=transactsql

https://in.answers.yahoo.com/question/index?qid=20090905225547AAAK6Ul

答案 2 :(得分:1)

由于CustomerID是您的主键,因此可能会删除ID列。自动增量柱通常用作"代理键"如果您没有简单的密钥(或者您没有密钥)。因此,您可以创建一个自动增量列并将其设置为主键,主要是因为聚类索引是表必须具有的。在几乎任何情况下,拥有堆表可能被认为是一种不好的做法。

答案 3 :(得分:0)

认为它没用,但它经常

Id字段用于检索使其唯一的列的列。它可以是任何列(您甚至可以使用Name),但Id是每个人都使用的约定。

这种列称为“主键”。顾名思义:它是识别行的主要方式。

示例:

  

如果PostalCodeHouseNumberCountry同时使Address行唯一,该怎么办?如何检索特定行的引用?通过在查询中指定三列,或者只使用Id。此外,如果更改三列中的任何一列,您的引用将变为无效。 Id始终保持不变。

答案 4 :(得分:0)

CustomerId是PK,因此它也是唯一的,在这种情况下,系统生成的另一个唯一ID不需要创建唯一的行ID。您可能仍希望出于性能原因创建它:小型数据类型可以在同一索引页上存储更多索引,这意味着更快的搜索时间。在这种情况下,如果CLUSTERED UNIQUE INDEX的数据类型较小,您可以在ID行创建NON CLUSTERED PRIMARY KEY,在CustomerID列创建ID

表中数据的顺序是没有问题的,从不对表自己进行排序,事实并非如此。数据按查询中的ORDER BY子句的顺序排序。