sql - 在 SQL 中使用人类可读的主键是否安全?

标签 sql primary-key human-readable

我想知道我是否可以对相对少量的数据库对象使用人类可读的主键,这些数据库对象将描述大都市地区。

例如,使用“washington_dc”作为华盛顿特区的pk,或使用“nyc”作为纽约市的pk。

的对象将是这些都市区对象的外键,我希望能够通过查看他们的数据库记录来判断一个人或企业的位置。

我只是担心,因为我的直觉告诉我这可能是违反良好做法的严重犯罪。

那么,我是否“被允许”做这种事情?

谢谢!

最佳答案

这完全取决于应用程序 - 自然主键在表面上很有意义,因为它们是人类可读的,并且在向最终用户显示数据时不需要任何连接。

然而,自然主键往往大于 INT (或什至 BIGINT )替代主键,并且很少有域没有自然主键更改的危险。以你的例子为例,一个城市更名并不是一件非常罕见的事情。当一个城市的名称发生变化时,您会得到一个更新,需要触及 city 的每个实例。作为外键或主键不再反射(reflect)现实(“数据显示列宁格勒,但它确实是圣彼得堡。”)

总而言之,自然主键:

  • 占用更多磁盘空间(大部分时间)
  • 更容易发生变化(在大多数情况下)
  • 更具人类可读性(只要它们不改变)

  • #1 和 #2 是否被 #3 充分抵消取决于您正在构建的内容及其用途。

    关于sql - 在 SQL 中使用人类可读的主键是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12590724/

    相关文章:

    java - 如何在 jOOQ 中写入 "like ' somevalue%'?

    mysql - 如何创建MySQL分层递归查询

    primary-key - SQL Server "pseudo/synthetic"复合 ID(键)

    php - 我如何对我的 SQL 和 PHP 代码进行基准测试?

    asp.net - 计算评论/帖子的数量

    sql - 自动递增 ID 值

    sqlite - 重复键在 SQLite 中不起作用

    Java - 将人类可读大小转换为字节

    MongoDB地理距离/半径到有用单位

    php - 从 id 获取可读数据的最佳方法