Joe*_*son 3 sql database-design
我一直在阅读关于数据建模中的自然键与代理键的激烈辩论,并且需要明确的是,我并不是想在这里讨论这个棘手的问题。我想知道的是,好的自然键的最佳示例是什么?
我在网上找到的似乎都是一些人认为可能有用但结果却并非如此的密钥,比如社会安全号码。(对于这一点:隐私问题,不是每个人都有一个,死后重复使用,身份盗窃后可以更改,可以兼作营业税 ID。)
我自己的猜测是,国际标准化代码(ISBN、VIN、国家代码、语言代码)将是很好的密钥。
发票号码、车辆登记号码、预定航班代码、登录名、电子邮件地址、员工号码、房间号码、UPC 代码。还有数千个行业、公共和国际标准,涉及货币、语言、金融工具、化合物和医疗诊断等各个方面。所有这些都是关键属性的潜在良好候选者。选择和设计密钥的一些明智标准是:简单性、稳定性和熟悉性(即熟悉使用它们的业务或其他环境)。
有些人似乎在选择“自然”键属性时遇到困难,因为他们假设特定键在某些特定人群中可能不是唯一的。这没有抓住重点。键的要点是强加一条业务规则,即在任何给定时间点,对于特定表中的数据群来说,属性必须并且将是唯一的。该表始终表示特定且希望易于理解的上下文中的数据(“业务领域”又称为“讨论领域”)。重要的是在该领域内应用唯一性约束的意图/要求。
例如,如果我的网站要求每个用户在注册时提供唯一的电子邮件地址,那么电子邮件地址可能是支持该网站的数据库中密钥的有效选择。事实上,其他域中的其他人群的电子邮件地址不需要唯一,这一事实并不一定会使我网站的密钥选择无效。
归档时间: |
|
查看次数: |
3192 次 |
最近记录: |