【发布时间】:2013-08-28 05:48:10
【问题描述】:
我正在做一张桌子
手机型号信息
+-------------+-----------------+------+-----+---------+----------------+
| 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 的新手。
【问题讨论】:
-
好吧,我会保留 ID 列,但这是一个漫长的争论。尝试谷歌
surrogate vs primary key,找到你喜欢的哲学...... -
我从网上关于 SQL 的教程中了解到,
unique表示一个列会有唯一值,所以我应该逻辑上只使用name作为主键。但是我是 SQL 和数据库的新手,所以在我的东西上线之前,我需要一个外部的意见。 -
使用 ID 是个好主意。然后,您可以更新任何其他字段,而不会断开与其他表的链接。一切都可以通过 ID 访问记录。
-
即使您决定使用
ID列,如果您只需要其中的唯一值,请也在name上应用UNIQUE索引柱子。请记住,仅仅因为有一个主键(以任何形式),您还应该强制执行任何辅助键。这使您的数据库更干净。 -
@Damien_The_Unbeliever 我在创建表格时确实这样做了。这是这张表的
show create table转储:pastebin.com/3DBYpDSZ 这就是你说的对吗?编辑 - 实际上这就是我创建它的方式。与转储不同:pastebin.com/gCTkJmgB
标签: mysql sql database-schema rdbms