是否有必要在SQL表中创建id列?

时间:2014-01-27 21:47:09

标签: mysql sql

大家好我在书或博客的某个地方读到,在SQL中有经验法则我们必须在每个表中使用PRIMARY KEY和AUTO-INCREMENT属性创建ID列。如果我在我的表中使用手机号码作为用户ID,该怎么办?我应该在我的表中创建id列,还是在我的表中作为主键的移动号码就足够了?

4 个答案:

答案 0 :(得分:2)

不是没有必要,但建议不要使用关联表。

此标识列提供了一个独特且不变的数据标识符,它使得建立外键关系变得非常容易。

关联表不会有这些Identity列之一,因为它本身没有数据,它们通常由2个或更多外键列组成。

答案 1 :(得分:1)

只要密钥是唯一的 - 它就可以用作主键。当您没有可用作主键的列时,应使用其他ID列,因为它不是唯一的,或者可以具有NULL值。整数列也是优选的。所以电话号码有效。

答案 2 :(得分:1)

如果您想使用电话号码作为主键,可以

create table MyData(
phonenumber int not null primary key,
fname varchar(25),
lname varchar(25)
...
)

但这可能不是最好的做法。因为电话号码可能会改变。一旦它属于客户A现在属于客户B.使用此模型,您可能最终遇到一个问题,您无法仅根据电话号码拉出您的唯一客户。如果将自增量索引添加为主键,则始终可以通过该ID引用唯一客户。 这是更安全,更清晰,更直观,更容易编码。特别是在添加外键等时会有所帮助。通过在开头选择错误的主键,您可能会在一两年内遇到大麻烦。

您还可以做的是添加一个自增量索引作为主键,并对电话号码设置一个UNIQUE约束,这样电话号码必须是唯一的才能输入到数据库中。这主要是为了数据完整性,例如,如果有人输错了某些东西,现在它与另一个数字匹配,它将立即被捕获。我仍然不会推荐这个,因为你可能会遇到这个约束可能会捕获有效案例的问题。

所以我会使用自增量索引作为主键,使事情变得简单并添加一个电话号码字段,该字段不能为空(这将是另一个约束:))

答案 3 :(得分:0)

创建SQL时,它必须具有唯一的可识别密钥,这意味着当您需要查询该特定表中的记录时,必须有唯一的列以便于识别。

主键是该特殊的数据库术语,唯一 分配给表中特定行的值。

在某些特殊情况下,您甚至可以从多个列中创建主键,而不只是一个。它们将其称为复合键。简而言之,创建你的桌子并将你的主键设为手机号码,如果它们是每个人都是独一无二的,我认为是这样的。

让我举个例子。社会保障号也被设定为美国和欧洲表中的主键;它不是增量键。