请勿使用邮政编码或社会安全号码
数据库依赖于密钥来存储,排序和比较或创建记录之间的关系。 如果你已经在数据库中呆了一段时间,你可能听说过不同类型的键:主键, 候选键和外键 。 当您创建新的数据库表时,系统会要求您选择一个主键 ,以唯一标识存储在该表中的每条记录。
为什么主键很重要
主键的选择是您在设计新数据库时要做的最重要的决定之一。 最重要的约束是您必须确保所选密钥是唯一的。 如果可能两个记录(过去,现在或将来)可能共享一个属性的相同值,那么对于主键来说这是一个糟糕的选择。
主键的另一个重要方面是由关系数据库中的其他表格使用。 在这方面,主键就像一个指针的目标。 由于这些相互依赖性,创建记录时必须存在主键,并且永远不会更改。
主键的选择不佳
有些人可能会认为主键的明显选择可能是一个糟糕的选择。 这里有一些例子:
- 邮政编码不能为城镇表格制作好主键。 如果您正在制作一个简单的城市查找表,邮政编码似乎是一个逻辑主键。 但是,经过进一步调查,您可能会意识到不止一个城镇共享一个邮政编码。 例如,新泽西州的海王星城市,海王星城市,廷顿瀑布城和沃尔镇都共享07753邮政编码。
- 由于很多原因, 社会安全号码并不是很好的主键。 大多数人认为他们的SSN是私人的,不希望数据库用户清楚地看到它。 有些人没有SSN--外国人或从未收到社会安全卡的移民。 个人死亡后,SSN也可以重新使用。 如果社会保障署在发生欺诈或身份盗窃的情况下发布新号码,一个人在一生中可能会有一个以上的社会安全号码。
- 电子邮件地址也是主键的不好选择。 虽然它们是独一无二的,但它们可以随时间变化。 此外,并非每个人都有电子邮件地址。
选择一个有效的主键
那么,什么使得一个好的主键? 在大多数情况下,请转到您的数据库系统寻求支持。
数据库设计的最佳做法是使用内部生成的主键。 您的数据库管理系统通常可以生成一个在数据库系统之外没有意义的唯一标识符。 例如,您可能使用Microsoft Access AutoNumber数据类型创建一个名为RecordID的字段。 自动编号数据类型会在您每次创建记录时自动增加字段。 虽然数字本身没有意义,但它提供了一种可靠的方式来引用查询中的单个记录。
一个好的主键通常很短,使用数字,并且避免使用特殊字符或大小写字符组合,以便快速进行数据库查找和比较。