**主键(primary key)**是一个字段,它的值在每条记录中都不同,因此能准确识别一行。它不能为空,也不应随时间改变。
题目会要求你从表中指出合适的键,或解释为什么某个字段不适合。这一课属于数据库与查询推理单元。
什么样的键才合适?
对每个字段做三项检验:
- 唯一: 两条记录有可能出现相同的值吗?
- 始终有值: 这个值可能缺失吗?
- 稳定: 以后需要修改吗?
字段必须三项都通过。最稳妥的键往往是专门编出来的代码,例如 ID,因为它被创建出来就是为了唯一。
例题
一家虚构的单车租赁店有下面这张表,名为 Bikes。
| BikeNo | Model | Colour | Size |
|---|---|---|---|
| B101 | Trail | Red | M |
| B102 | Trail | Blue | L |
| B103 | City | Red | M |
| B104 | City | Red | S |
步骤 1,检验 Model。 Trail 出现两次,不唯一。排除。
步骤 2,检验 Colour。 Red 出现三次。排除。
步骤 3,检验 Size。 M 出现两次。排除。
步骤 4,检验 BikeNo。 B101、B102、B103、B104 各不相同,而且每辆单车都有。接受。
最终答案:BikeNo 是主键。
注意,答案也取决于数据的规则。如果店里有上千辆单车,Model 和 Colour 就更不合适了。
要留意的错误
常见的失误是因为某个字段在你看得见的行里唯一,就选它。
错误答案:“Size 不是键,但 Model 可以,因为只有两种型号。”
这个答案错了,因为 Trail 和 City 都重复出现。
相关的失误是在有 400 名学生的学校表里选姓名字段。即使今天没有重名,两个学生也可能同名。纠正:问的是重复是否可能出现,而不是现在是否存在。
自我检测
1. 一张虚构的图书馆表有字段 BookCode、Title、Author、Year。哪一个是最合适的键?
查看答案
BookCode。 书名可能在不同版本重复,作者会写很多本书,年份也会重复,但代码是为了唯一而创建的。
2. 在上一课的 Plants 表中,解释为什么 Type 不能当键。
查看答案
Type 会重复:Rose、Orchid 和 Hibiscus 都是 Flowering,所以它无法识别单一记录。
3. 为什么可以留空的字段不适合当键?
查看答案
空值无法识别记录,所以有些记录将无法被找到。键必须始终有值。
接下来学什么
表格结构清楚之后,继续学习写出简单的 SELECT 筛选。单元练习题在最后会再次练习键。
如果你希望有人在做这些题时检查你的推理,可以看看我们的计算机科学线上一对一补习。