枚举类型在数据库模式中

时间:2014-01-13 22:10:42

标签: sql database database-design database-schema

这可能是一个基本的数据库问题,但我更习惯于使用对象而不是表。假设我有一个带有属性'genre'的对象'Movie'。应使用枚举类型限制类型(例如,唯一有效的类型是恐怖,动作,喜剧,戏剧)。该如何转换为数据库模式?

  • 我可以在Movies表中放置一个'genre'列并依赖检查输入以确保'genre'赋值有效?
  • 或者,我可以包含一个带有预填充行的Genres表,然后在Movies表中包含一个带有Genres表外键的列?

我倾向于第一种选择,但是存在陷阱/等等。我不在考虑?

2 个答案:

答案 0 :(得分:2)

我倾向于使用查找表,这是您的第二个选项。我更喜欢这个的原因是我可以简单地通过在Genres表中添加一行来添加新类型。无需修改代码或修改模式中的枚举定义。

另请参阅我对How to handle enumerations without enum fields in a database?

的回答

答案 1 :(得分:1)

这是一个有用的启发式方法:您是否将客户端代码中的所有值都视为相同?

  • 如果您这样做,那么只需使用查找表即可。即使您现在没有设想添加新值 1 ,需求也会随着时间的推移而变化,而查找表将允许您在不更改客户端代码的情况下执行此操作。您的案件似乎属于该类别。
  • 如果不这样做,那么枚举可能更合适 - 无论如何,关于每个不同值的“知识”都包含在客户端代码中,因此没有什么有用的东西可以存储在数据库中。

灰色区域是你做两件事的。例如。您需要以特殊方式处理值,但仍有一些额外的字段(与每个值相关联)可以一般地处理(例如,只是将其显示给用户)。或者您需要以特殊方式处理某些值。在这些情况下,我会倾向于查找表。


1 或删除或修改旧值。