SQL中自然键的最佳示例是什么?

时间:2017-11-08 01:16:06

标签: sql database-design

我一直在阅读有关数据建模中自然与代理键的重大争论,并且要清楚我并不是想在这里讨论这个棘手的问题。我想知道的是什么是好自然键的一些最好的例子?

我在网上找到的所有内容都是有人认为可能好的关键,但结果却不是,就像社会安全号码一样。 (对于那个:隐私问题,不是每个人都有一个,死后重复使用,可以在身份盗用后更改,可以加倍作为营业税ID。)

我自己的猜测是国际标准化代码(ISBN,VIN,国家代码,语言代码)会成为好钥匙。

3 个答案:

答案 0 :(得分:3)

发票号码,车辆登记号码,预定航班代码,登录名称,电子邮件地址,员工编号,房间号码,UPC代码。从货币,语言,金融工具,化合物和医疗诊断等各方面,还有数千种行业,公共和国际标准。所有这些都是关键属性的潜在良好候选者。选择和设计密钥的一些合理标准是:简单,稳定和熟悉(即熟悉业务或其他使用环境)。

有些人似乎很难选择“自然”关键属性,因为他们假设特定关键字在某些特定人群中可能不是唯一的情况。这忽略了这一点。关键点在于强加一个业务规则,即在任何给定的时间点,属性必须且对于特定表中的数据总体是唯一的。该表总是代表特定且有希望被充分理解的上下文中的数据(“业务领域”AKA“话语领域”)。意图/要求在该域中应用唯一性约束。

例如,如果我的网站要求每个用户在注册时提供唯一的电子邮件地址,那么电子邮件地址可能是支持该网站的数据库中有效的密钥选择。在其他域中还有其他人群不需要电子邮件地址唯一的事实并不一定会使我的网站的密钥选择无效。

答案 1 :(得分:2)

假设有一个名为 person 的表格。当我们将列 LastName,FirstName 地址一起用作关键字时,这将是一个自然的关键,因为这些列对于人来说是完全自然的,并且还有一个表中列之间的逻辑关系。

答案 2 :(得分:1)

你的DNA代码将成为现实生活中自然钥匙的一个很好的例子。