字符串或枚举

时间:2009-06-16 18:49:14

标签: database database-design enums

哪种情况更好?

假设最多有300个可能的值,基本上是一个关键/值对表,其中有关列是关键:

枚举 Char / Varchar

我只是想知道是否有人处理过具有许多可能值的Enum专栏以及可能存在的缺陷。

修改

键是预定义的。

项目表:

id,name,...

属性表:

id,item_id,key,value

3 个答案:

答案 0 :(得分:3)

如果您正在讨论300个可能的值,我将使用单独的id / value查找表。

特别是从你的问题中给出了这个陈述:

  

关于什么本质上是关键/值对的表,其中所讨论的列是关键

那么为什么不直接将它作为键/值对的表格呢?

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

FrontLeftBottom
FrontRightBottom
FrontRightTop
FrontLeftTop
RearLeftBottom
[...]

但您也可以将其分解为仅六个值,并使用bitflag枚举进行组合。

Front
Rear
Left
Right
Top
Bottom

如果值空间不固定 - 也就是说很可能会添加新值 - 可以使用字符串或新的deticated类型。