我将从一个例子开始。如果我有一个person
带有预期代理主键的表Id
:
+----+--------+------------+-------------+ | 身份证 | 姓名 | 出生日期 | 社会保障号 | +----+--------+------------+-------------+ | 1 | 约翰 | 1901-01-01 | 111-11-1111 | | 2 | 简 | 1902-02-02 | 222-22-2222 | | 3 | 约翰 | 1901-01-01 | 111-11-1111 | +----+--------+------------+-------------+
注意Id
s 1 & 3 具有相同的属性;他们都代表同一个人。
现在,根据我们对构成主键的理论的了解,我认为这里总结得很好:
- 主键必须唯一标识每条记录。
- 记录的主键值不能为空。
- 创建记录时,主键值必须存在。
- 主键必须保持稳定——您不能更改主键字段。
- 主键必须紧凑并且包含尽可能少的属性。
考虑第一个项目符号,“主键必须唯一标识每条记录。 ”在我的示例中,我认为每个记录是否Id
代表唯一性取决于真正应该被视为唯一的内容。不同的数据库记录?是的。另一个人(记录应该代表什么)?不。
因此,多个Id
s 表示生成数据的功能相同的主题,存在于 2 条记录中。一种“二对一的身份”。我没有读过任何直接解决我的示例说明的场景的内容,因为这与什么是或不是 PK 有关。
- 这个例子是否违反了构成主键的理论?
- 如果不是,这个例子是否说明违反了任何更大的数据库架构原则,或者这个概念是否可以简化为“数据重复 - 清理它”这样简单的东西?
非常感谢。