【发布时间】:2009-06-09 14:48:21
【问题描述】:
我最近看到一个数据库,其中有一个表 Types,列有 Id、Key 和 Name。
Id 只是类型的 Id,Key 是类型的短键名称,例如“啤酒”,Name 是可以为用户显示的文本(例如, “我们最棒的啤酒”)。 Id 当然是唯一的,并且是该表的主键。 Key 也是独一无二的。其他表始终使用其 Id 列与表类型链接,但存储过程始终使用 Key 进行过滤(例如 "X inner join Types on X.type_Id = Types.Id where Types.Key = 'beer' " 而不是 "X.type_Id = 3")。
我认为这是一种不好的方法。我会使用Id 而不是Key,即使我知道Key 是独一无二的。我认为 Key 可能(并且可以)更改,但 Id 不应该更改,因为它在另一个表中用于链接。有什么不这样做的规则吗?我的意思是如果我们将Key“beer”更改为“beers”,一些存储过程将停止正常工作(实际上确实存在这种情况)。对我来说,如果Id 标识表中的行,我们应该始终使用 id,因为如果需要其他属性可能会更改并且不会导致问题,这对我来说是非常直观的。我说的对吗?
【问题讨论】:
-
面临同样的问题,但阅读这些答案后,我更加困惑。
标签: sql database-design primary-key