SQL ENUM 是否可以在 table 中保存几个枚举值

SQL ENUM is it possible to save few enum values in table

我需要创建一个水上旅游门户,我在想:是否可以在 table 中保存一些可枚举的值?

例如,轨道可以有不同类型的船:皮划艇、船、独木舟。因此,创建曲目的人可以选择该曲目仅对其中一种类型或 2 或 3 有效。我如何存储此数据?我正在考虑枚举器,但我不确定我是否能够将这些数据存储在 table.

虽然有 ENUM 类型,但我通常不建议使用它。它有时会有一些非常规行为(您可以通过索引引用值,并且许多 API 不能很好地处理数据类型),并且修改值列表需要更改 table 结构(这需要重建 table,数据和所有,在幕后)。

最好创建一个查找 table,将枚举 int 值作为 id,将字符串作为值的名称。您的 "tracks" table 可以只引用它,您为用户提供的任何界面也可以 select 船型。使用 ENUM 意味着您要么必须将船类型嵌入到用户界面后面的代码中,然后您必须与 table 定义中的枚举值进行协调;或查询 table 结构,并解析 "boat type" 字段的数据类型。

注意:如果不同的类型需要不同的处理,那么有一个代码枚举镜像这样的查找 table,或者更确切地说有一个查找 table 反映会非常有帮助代码枚举,然后查找 table 主要用于在数据库端强制执行数据完整性,并帮助以用户可理解的方式显示数据。

此外,考虑到未来的扩张,如果旅游门户网站以后决定开始提供租赁服务,那么可以租赁的船只可能会有不同的类型;所以你要么必须复制 ENUM,要么只引用相同的查找 table.

您正在寻找的功能由 SET 数据类型提供,它允许您从给定的一组(不超过 64 个)元素中向列分配零个或多个元素(请参阅 documentation ).
Uueerdo 的建议当然仍然适用。