我想知道我是否可以对相对少量的数据库对象使用人类可读的主键,这些数据库对象将描述大都市地区。
例如,使用“washington_dc”作为华盛顿特区的pk,或使用“nyc”作为纽约市的pk。
吨 的对象将是这些都市区对象的外键,我希望能够通过查看他们的数据库记录来判断一个人或企业的位置。
我只是担心,因为我的直觉告诉我这可能是违反良好做法的严重犯罪。
那么,我是否“被允许”做这种事情?
谢谢!
最佳答案
这完全取决于应用程序 - 自然主键在表面上很有意义,因为它们是人类可读的,并且在向最终用户显示数据时不需要任何连接。
然而,自然主键往往大于 INT
(或什至 BIGINT
)替代主键,并且很少有域没有自然主键更改的危险。以你的例子为例,一个城市更名并不是一件非常罕见的事情。当一个城市的名称发生变化时,您会得到一个更新,需要触及 city
的每个实例。作为外键或主键不再反射(reflect)现实(“数据显示列宁格勒,但它确实是圣彼得堡。”)
总而言之,自然主键:
#1 和 #2 是否被 #3 充分抵消取决于您正在构建的内容及其用途。
关于sql - 在 SQL 中使用人类可读的主键是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12590724/