Database 字符串或枚举

Database 字符串或枚举,database,database-design,enums,Database,Database Design,Enums,哪种情况更好 假设基本上是一个键/值对表,其中所讨论的列是键,则该表上可能有300个以上的值: 枚举或Char/Varchar 我只是想知道是否有人用这么多可能的值处理过Enum列,以及可能的陷阱是什么 编辑: 关键点是预定义的 项目表: 身份证、姓名 属性表: id,item_id,key,value如果你说的是300个可能的值,我将使用一个单独的id/值查找表 特别是考虑到你的问题: 基本上是一个键/值对表,其中所讨论的列是键 那么,为什么不把它变成一个键/值对表呢?也许我误解了这个问题,但

哪种情况更好

假设基本上是一个键/值对表,其中所讨论的列是键,则该表上可能有300个以上的值:

枚举Char/Varchar

我只是想知道是否有人用这么多可能的值处理过Enum列,以及可能的陷阱是什么

编辑:

关键点是预定义的

项目表:

身份证、姓名

属性表:


id,item_id,key,value

如果你说的是300个可能的值,我将使用一个单独的id/值查找表

特别是考虑到你的问题:

基本上是一个键/值对表,其中所讨论的列是键


那么,为什么不把它变成一个键/值对表呢?

也许我误解了这个问题,但通常如果我有一个包含300多种类型的列,它告诉我需要对它进行规范化,并将它放在另一个表中,使用外键。

如果只有正交值,我建议选择一个枚举-例如,命名颜色就是一个可以证明创建大型枚举的例子。问题是如果你的300+值是正交的-你能把它分解成更小的正交集吗?例如,立方体的八个角可以用八个值的枚举来描述

FrontLeftBottom
FrontRightBottom
FrontRightTop
FrontLeftTop
RearLeftBottom
[...]
但您也可以将其分解为六个值,并使用bitflag枚举组合它们

Front
Rear
Left
Right
Top
Bottom

如果值空间不是固定的-也就是说,很可能会添加新值-一个字符串或一个新的deticated类型是正确的选择。

老实说,我认为这不会改变我的答案。我仍然希望属性表中的“键”是一个FK a第三个表,其中包含300个可能的“键”值。对于这种情况,枚举是个坏主意,立即出现代码气味,维护噩梦