提问人:PassingThru 提问时间:8/18/2023 最后编辑:philipxyPassingThru 更新时间:8/19/2023 访问量:54
1 对多、多对多、多对 1 的数据库规范化
Database normalization for 1 to many, many to many, many to 1
问:
对于这两种情况,我都使用相同的颜色 [查找] 表,但存储数据的方式不同。下面是要存储的记录的规范:
- ID 为 1 的汽车有 3 种颜色可供选择:蓝色、红色、白色。
- ID 为 2 的汽车有 2 种颜色可供选择:蓝色、红色
颜色
同上 | 名字 |
---|---|
1 | 蓝 |
2 | 红 |
3 | 白 |
方案 1
汽车
同上 |
---|
1 |
2 |
车彩
同上 | CarId | 颜色 Id |
---|---|---|
1 | 1 | 1 |
2 | 1 | 2 |
3 | 1 | 3 |
4 | 2 | 1 |
5 | 2 | 2 |
方案 2
汽车
同上 | 颜色 ID |
---|---|
1 | 1,2,3 |
2 | 1,2 |
哪个是存储数据的首选?
我在这两种情况下都使用了该结构。方案 1 似乎是最灵活的。需要关于前进的首选的建议。
答:
0赞
PassingThru
8/18/2023
#1
David Browne的评论
对于 1) 删除 CarColor 中的 ID 列,并将 (CarId,ColorId) 设置为主键。该 ID 是无用的,无论如何都需要 (CarId,ColorId) 的唯一索引。
引导我阅读这篇文章,并说服我使用这种方法。具体而言,应尽可能使用自然键,并且不要在一列中存储多个键(如方案 2)。
上一个:这种关系如何生成候选密钥?
下一个:领域关系与嵌入对象
评论