SQL ENUM是否可以在表中保存一些枚举值

时间:2019-11-15 18:08:34

标签: mysql sql enumerator

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

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

2 个答案:

答案 0 :(得分:1)

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

您最好用enum int值作为ID和值名称的字符串创建查找表。您的“航迹”表可以引用该信息,您可以为用户提供的选择船型的任何界面也可以引用。使用ENUM意味着您要么必须在用户界面后面的代码中嵌入船型,然后就必须与表定义中的枚举值进行协调;或查询表结构,然后解析“船型”字段的数据类型。

注意:如果不同类型需要不同的处理,则具有代码枚举镜像(例如查找表),或者具有一个反映代码枚举的查找表会非常有帮助,那么查找表主要用于强制执行数据库方面的数据完整性,并以用户可理解的方式帮助显示数据。

此外,请牢记将来的扩展,如果旅游门户网站后来决定开始提供便利的租赁服务,那么可以租用的船可能会具有不同的类型;因此您必须复制ENUM或仅引用相同的查找表。

答案 1 :(得分:0)

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