可以安全地在SQL中使用人类可读的主键吗?

Cla*_*ell 5 sql primary-key human-readable

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

例如,使用"washington_dc"作为华盛顿特区都市区的pk,或纽约市的"nyc".

对象将国外键入这些城域网对象,我希望能够告诉当一个人或企业只是通过看他们的数据库记录位置.

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

那么,我"允许"做这种事吗?

谢谢!

Sea*_*ira 5

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

但是,自然主键往往比suragate主键大INT(或甚至BIGINT)suragate主键,并且很少有域没有自然主键更改的危险.举个例子,一个改名的城市并不是一个非常罕见的事件.当一个城市的名称发生变化时,你会得到一个更新,需要触及每个实例city作为外键或一个不再反映现实的主键("数据显示列宁格勒,但它确实是圣彼得堡". )

总而言之,自然主键:

  1. 占用更多磁盘空间(大部分时间)
  2. 更容易发生变化(在大多数情况下)
  3. 更具人性化(只要它们不会改变)

#3和#2是否被#3充分抵消取决于你正在构建什么以及它的用途.