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

问题描述 投票:-1回答:2

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

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

mysql sql enumerator
2个回答
0
投票

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

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

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.