1

我正在做一张桌子

手机型号信息

+-------------+-----------------+------+-----+---------+----------------+
| Field       | Type            | Null | Key | Default | Extra          |
+-------------+-----------------+------+-----+---------+----------------+
| ID          | int(5) unsigned | NO   | PRI | NULL    | auto_increment |
| linktospecs | varchar(255)    | YES  |     | NULL    |                |
| name        | varchar(30)     | NO   | UNI | NULL    |                |
| company     | varchar(20)     | NO   |     | NULL    |                |
+-------------+-----------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

在此表中,来自任何手机制造商的每部手机都只会出现一次,以及其他信息,如制造商名称和指向其规格的官方链接。这就是我现在能想到的。

我想要的是,由于该name列本质上是唯一的(两行相同的移动模型会很愚蠢),我希望能够使用它进行索引,简单地说,因为在我的应用程序中,当用户搜索移动名称时,我将使用该name列从该表中检索所有其他列。

但是在许多示例中,我看到人们使用一个额外的简单 ID 列,该列会自动递增以将其保持为简单的主键。所以,我的问题是,我需要保留该ID列还是唯一的name列是否足以使用该表?我是数据库和 SQL 的新手。

4

4 回答 4

2

将 ID 列作为主键总是一个好主意,因为它永远不会改变。如果您需要更改电话的名称,并且名称是主键,那么之前对该电话的任何引用都将立即停止工作,因为主键值不再存在。另一方面,如果每个人都有一个唯一的 ID,则可以更改名称而不影响 ID,并且所有以前的引用都将保持有效。

也有可能两家不同的公司推出同名手机,在这种情况下,如果姓名是您的主键,那么您只能在其中一个上存储信息。

于 2013-08-28T06:02:35.967 回答
0

主键意味着它将是一个聚集索引 - 您将搜索name列而不是id列,因此搜索应该比非聚集索引有所改善。-- https://stackoverflow.com/a/3543719/2724079

于 2013-08-28T05:58:14.840 回答
0

我更喜欢 ID,因为名称可能匹配诺基亚 500 和 HTC 500。您不能在型号名称中添加公司名称。在这种情况下,您可能会得到多个。在这种情况下,最好使用“ID”作为键。

如果您不喜欢将 ID 用作附加列,请使用公司和名称的组合作为键。

于 2013-08-28T05:59:04.623 回答
0

在我看来,使用ID列会更好,就好像在不久的将来,如果你想添加一些包括外键(出现在其他表中的表的主键)概念的功能,那么使用ID可能只是你的任务和你的努力各个方面(如果您需要更改电话的名称,并且名称是主键,那么之前对该电话的任何引用都将立即停止工作,因为主键值不再存在)

于 2013-08-28T06:04:07.303 回答