我有一个应该包含研讨会的地方。可以举办研讨会:
- 内部
- 在另一个城市
- 在另一个国家
起初,我只有一个表,所以我使用了枚举。但是现在我有三个无法合并的表,它们都应该有这些信息,客户希望这个字段可以自定义,以便将来添加或删除选项。但是他们说选项的数量是有限的,可能是 5 个左右。
现在,我的问题是,我应该为这个字段使用枚举还是表格?更重要的是,在枚举或表之间做出决定的正确方法是什么?
PS:枚举字段是从数据库中动态检索的,它们没有嵌入到代码中。
我有一个应该包含研讨会的地方。可以举办研讨会:
起初,我只有一个表,所以我使用了枚举。但是现在我有三个无法合并的表,它们都应该有这些信息,客户希望这个字段可以自定义,以便将来添加或删除选项。但是他们说选项的数量是有限的,可能是 5 个左右。
现在,我的问题是,我应该为这个字段使用枚举还是表格?更重要的是,在枚举或表之间做出决定的正确方法是什么?
PS:枚举字段是从数据库中动态检索的,它们没有嵌入到代码中。
作为一般经验法则,在应用程序中,在以下情况下使用枚举:
在以下情况下使用查找表:
如果满足枚举的先前标准并且:
您需要为截止点的值数量选择您认为合理的截止值,我经常听到建议在 10 到 15 之间。
如果您使用数据库引擎提供的枚举构造,则前两组规则仍然适用。
在您的具体情况下,我会使用查找表。
如果在这种情况下元素是固定的,则应使用枚举,如果是可变数据,则enum
不应使用。在那些情况下table
是更优选的。
我认为在你的情况下表应该没问题。
我同意关于枚举精简、稍微快一点并在合理使用时降低数据库复杂性的最佳答案(即没有大量且快速变化的值)。
但是:有一些巨大的警告需要考虑:
大多数 ORM(例如Doctrine)不支持 ENUMS,因为它们不是 SQL 标准。因此,如果您考虑在您的项目中使用 ORM,甚至使用某些东西作为Doctrine Migrations Bundle ,您最终可能会编写一个复杂的扩展包(我已经尝试过)或使用现有的类似Postgresql的扩展包甚至不能为枚举添加更多的伪支持:通过将枚举视为带有检查约束的字符串类型。一个例子:
CREATE TABLE test (id SERIAL NOT NULL, pseudo_enum_type VARCHAR(255) CHECK(pseudo_enum_type IN ('value1', 'value2', 'value3')) , ...
因此,在更复杂的设置中使用 Enums 的收益确实低于零。
说真的:如果我不是绝对必须(而且我没有),我总是会避免在数据库中使用枚举。