主要观点:作者通过自己汽车底盘号错误的经历,引发对数据库中自然键的思考。认为自然键存在诸多问题,如可能并非真正唯一、可能因时间等因素导致同一实体有多个键、易出现录入错误等,应始终使用合成键。
关键信息:
- 丹麦汽车每两年强制年检,作者汽车底盘号被指错误, mechanic 轻松修改后未出现问题。
- 作者参与数据库课程,学生提出用自然键设计数据库,如餐厅数据库以餐厅名、城市名和年份组合为键,但存在问题。
- 自然键保证唯一性只是问题之一,如个人身份证号可能因变性等原因导致同一人有多个,且不能保证是双射。
- 即使自然键唯一且能追踪实体,仍存在数据录入错误,系统应允许纠正数据,不能用外部定义的键作为数据库键。
- 作者早年常使用自然键,如今遵循总是使用合成键的启发式原则。
重要细节: - 介绍了自然键(如餐厅名、城市名等组合)、合成键、自然的自然键(如汽车底盘号、个人身份证号等)等概念。
- 以丹麦 CPR 号为例,说明因法律等原因同一人可能有多个相同类型的键。
- 提及数据录入错误的各种情况,如 end-user 误输、系统升级迁移中的数据转换错误等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。