关系数据模型全解析
1. 主键的选择
在设计数据库表时,主键的选择至关重要。以订单商品表为例,由于一个订单可能包含多个商品,且同一个商品可能出现在多个订单中,订单号和商品编号会重复,所以单独的订单号列或商品编号列都不能作为表的主键。而订单号和商品编号的组合是唯一的,因此可以将这两列连接起来形成表的主键。
虽然也可以将表中的三列(订单号、商品编号、数量)都连接起来确保主键的唯一性,但数量列对于确保唯一性并非必需,所以不应使用。一个好的主键应具备以下特性:
- 连接主键应使用最少数量的列来确保主键的唯一性。
- 连接主键中使用的列应尽可能是无意义的标识符。
此外,还存在全键关系,即表中的每一列都是主键的一部分。例如图书馆的图书目录,每本图书的ISBN是唯一的主键,每一个ISBN会被分配到一个或多个主题词,每个主题词也会被分配到一本或多本图书,这就形成了图书与主题词之间的多对多关系。可以用如下关系表示:
subject_catalog (isbn, subject_heading)
这里只需要将主题词与图书标识符配对,不需要额外的数据,所以表中的所有列都成为主键的一部分。
以下是一个示例订单商品表:
| 订单编号 | 商品编号 | 数量 |
| ---- | ---- | ---- |
| 10991 | 0022 | 1 |
| 10991 | 0209 | 2 |
| 10991 | 1001 | 1 |
| 10992 | 0022 | 1 |
|