0

表格示例:

------------------------------------
| Id | ItemId | Description | Price |
------------------------------------ 

两个 ID (IdItemId) 都是唯一的并且是自动生成的。它们之间的区别在于,第一个 Id( Id) 用作表内识别的经典 Id,第二个 Id( ItemId) 用作项目识别字段,并且它可以抵抗表清理(执行经典 Id 的重置时)和迁移。

这是好主意还是不好?为什么?请解释。

4

2 回答 2

2

每个表实现(至少)两个键是非常常见的做法:一个代理键,通常用于参考完整性目的(Id在您的示例中)和一个自然键- AKA域密钥业务密钥- 用作业务域中的标识符(大概ItemId在你的例子中)。

使用代理不是普遍的好主意。您应该根据具体情况决定要实现的每个密钥的预期目的和优势。不要假设一种设计模式适合所有人。作为一个非常普遍的规则,选择和设计密钥的一些好的标准是密钥属性的熟悉度、简单性和稳定性。除此之外,业务规则应该确定您需要哪些密钥。拥有尽可能多的密钥,以准确地对业务域进行建模并保持数据完整性。

就术语而言,如果您真的是指key,请不要使用Id一词。Id 过于模棱两可且过载。在关系/SQL 数据库中,行由键标识。Id 对于列名是可以的,但不是描述表格设计或提出这个问题的正确方式。

于 2013-07-23T12:20:25.963 回答
1

实际上完全取决于您的要求。如果您的要求说您需要身份,那么理想情况下使用 ID 列不是一个好习惯,这在数据级别没有意义,并且很难将 ID 列作为外键。建议仅在数据中没有自然主键的情况下使用标识列。

于 2013-07-23T12:36:18.967 回答