表格示例:
------------------------------------
| Id | ItemId | Description | Price |
------------------------------------
两个ID(Id
和ItemId
)都是唯一的并自动生成。它们之间的区别在于,第一个Id(Id
)用作表内标识的经典Id,第二个Id(ItemId
)用作项目标识字段,它可以抵抗表格清理(执行经典Id时)重置)和迁移。
这是好主意还是没有?为什么?请解释一下。
答案 0 :(得分:2)
每个表实现(至少)两个密钥是非常常见的做法:代理密钥,通常用于参照完整性目的(在您的示例中为Id
)和自然密钥 - AKA 域密钥或业务密钥 - 用作业务域中的标识符(在您的示例中可能是ItemId
)。
使用代理人并不是一个普遍的好主意。您应根据具体情况决定要实现的每个密钥的预期目的和优势。不要假设一种设计模式适合所有。作为一般规则,选择和设计密钥的一些好标准是关键属性的熟悉性,简单性和稳定性。除此之外,业务规则应确定您需要的密钥。拥有尽可能多的密钥来准确地建模业务领域并保持数据完整性。
就术语而言,如果您的意思是 key ,请不要使用 Id 这个词。我太暧昧和过载。在关系/ SQL数据库中,行由键标识。 Id适用于列名,但不适合描述表设计或提出此问题。
答案 1 :(得分:1)
实际上完全取决于您的要求。如果您的要求说您需要身份,那么理想情况下,使用ID列并不是一个好习惯,它在数据级别没有意义,并且很难将ID列作为外键。建议只使用Identity列,以防您的数据中没有自然主键。