我想存储团队的颜色,但不幸的是我使用的是不支持enums的sqlite。我想存储团队颜色如下:
id | team name | team colors
1 vikings red,orange,white
2 angles gold,black
要走的路是什么?。
答案 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值呢?