枚举替代品

时间:2011-04-19 10:57:33

标签: c++ qt4 sqlite

我想存储团队的颜色,但不幸的是我使用的是不支持enums的sqlite。我想存储团队颜色如下:

id   |   team name   |  team colors

1      vikings           red,orange,white

2      angles            gold,black

要走的路是什么?。

4 个答案:

答案 0 :(得分:4)

可能有点矫枉过正,但这样的结构呢?

COLORS
id  color
1   red
2   orange
3   white
4   gold
5   black

TEAMS
id | team name | team colors
1    vikings     1
2    angles      2

TEAM COLORS
teamid | colorid
1        1
1        2
1        3
2        4
2        5

然后,一些简单的sql将生成您需要的颜色列表。

另一方面,您可以只存储颜色名称。您必须在应用程序中解析它们。

答案 1 :(得分:3)

最简单的方法(在所有条件下不一定是最好的)是创建一个名为colors的表(例如):

table color
id | color
1    green
2    red
3    blue
....

那是你的枚举表。您的c ++枚举可以转换为整数,然后可以将其用作主键值。但是如果您将这些数据存储在关系存储中,我认为您不希望将这些数据绑定到像枚举这样的代码级工件。表内容的更改必须强制更改代码。

然后,以典型的规范化方式,您创建一个relational attribute表,以表示您的团队与颜色枚举之间的多对多关系。 color_id字段映射到颜色的表主键,team_id映射到teams表主键。

table team-colors (color_id + team_id == primary key)
color_id | team_id
1          1
2          1
2          2
3          2
....

然后你有你的团队的桌子

table teams
id    | name 
1       vikings
2       angles
....

了解每个团队的颜色,使用以下SQL伪代码查看(或运行SQL)

SELECT a.id as team_id, a.name, b.color, b.id as color_id
FROM teams a, colors b, team_colors c
WHERE a.id = c.team_id and b.id = team_colors.color_id

有很多语法细节需要处理这个问题(有些条件可能不太理想,在一篇文章中讨论太多)。但是,这或多或少是一般的想法。

答案 2 :(得分:2)

枚举可以转换为整数。假设您有

enum Color { red = 1, orange = 2, white = 4, gold = 8, black = 0x10 };
Color teamColor = red | orange | white;
然后您可以将teamColor存储为整数(int)teamColor

答案 3 :(得分:0)

枚举本质上是一个int,为什么不存储int值呢?