Jan*_*ist 9 database-design primary-key
我有几个数据库表,只包含一个列和很少的行,通常只是另一个系统中定义的内容的ID.然后使用其他表中的外键引用这些表.例如,一个表包含国家代码(SE,DK,US等).所有值始终是唯一的自然键,它们在其他(传统)系统中用作主键.
似乎没有必要为这些表引入新的代理键,或者?
一般情况下,不应使用代理键的例外情况是什么?
mar*_*c_s 22
我想说必须满足以下条件:
你的自然钥匙必须是绝对的,积极的,无例外的,允许的,独特的(诸如名字,社会安全号码之类的东西通常似乎是独一无二的 - 但实际上并非如此)
你的自然键应该和INT一样小,例如大小不超过4个字节(不要为你的PK使用VARCHAR(50),特别是不要在SQL Server中使用你的集群键!)
你的自然钥匙应该是稳定的,例如永远不会改变(好吧,使用ISO国家代码,这几乎是给定的 - 除非南斯拉夫或苏联等国家崩溃,或者像两个德国人团结一样 - 但这种情况很少见)
如果满足这些条件,您可以将自然键视为您的PK - 但这应该是所有表中的2%例外 - 而不是常态.