Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 枚举备选方案_C++_Qt4_Sqlite - Fatal编程技术网

C++ 枚举备选方案

C++ 枚举备选方案,c++,qt4,sqlite,C++,Qt4,Sqlite,我想存储团队的颜色,但不幸的是,我使用的是不支持枚举的sqlite。我想像这样存储团队颜色: id | team name | team colors 1 vikings red,orange,white 2 angles gold,black 怎么办?枚举本质上是一个int,为什么不存储int值呢?枚举本质上是一个int,为什么不存储int值呢?枚举可以转换为整数。假设您有,那么您可以将teamColor存储为整

我想存储团队的颜色,但不幸的是,我使用的是不支持枚举的sqlite。我想像这样存储团队颜色:

id   |   team name   |  team colors

1      vikings           red,orange,white

2      angles            gold,black

怎么办?

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

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

枚举可以转换为整数。假设您有,那么您可以将teamColor存储为整数
(int)teamColor

枚举可以强制转换为整数。假设您有,那么您可以将teamColor存储为整数
(int)teamColor

可能有点过火,但是像这样的结构怎么样

enum Color { red = 1, orange = 2, white = 4, gold = 8, black = 0x10 };
Color teamColor = red | orange | white;
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将生成所需的颜色列表


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

可能有点过分,但是像这样的结构怎么样

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将生成所需的颜色列表

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

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

这是您的枚举表。您的C++枚举可以被铸造成int,然后可以用作主键值。但是,如果您将这些数据存储在关系存储中,我认为您不希望将它们绑定到类似于枚举的代码级工件。表内容的更改必须强制更改代码

然后,以典型的规范化方式,创建一个
关系属性
表,以表示团队和颜色枚举之间的多对多关系。color_id字段映射到color的表主键,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
有很多语法细节需要处理(在某些情况下,这可能是不可取的,太多了,无法在一篇文章中讨论)。然而,这或多或少是一个总体想法。

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

这是您的枚举表。您的C++枚举可以被铸造成int,然后可以用作主键值。但是,如果您将这些数据存储在关系存储中,我认为您不希望将它们绑定到类似于枚举的代码级工件。表内容的更改必须强制更改代码

然后,以典型的规范化方式,创建一个
关系属性
表,以表示团队和颜色枚举之间的多对多关系。color_id字段映射到color的表主键,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

有很多语法细节需要处理(在某些情况下,这可能是不可取的,太多了,无法在一篇文章中讨论)。然而,这或多或少是一个总体想法。

我不想以这种方式存储。Buurman,仍然存在如何在sqllite中构造数据库表的问题。因此,这比将值从一个表单转换到另一个表单要复杂得多。我不想以这种方式存储。Buurman,仍然存在如何在sqllite中构造数据库表的问题。因此,这比将值从一种形式转换到另一种形式要复杂得多。我更喜欢使用C++本地原件。代码用于代码,rdbms用于数据。其他的都是将数据硬编码到代码IMO中。这也和我的建议差不多(+1)。我更喜欢使用C++本地原件。代码用于代码,rdbms用于数据。其他任何事情都是将数据硬编码到代码IMO中。这仍然不能回答在什么类型的SQL结构下存储和检索这些信息。因为这似乎是关系数据,所以我认为这些信息不应该表示为枚举——因为数据存储中的更改涉及到代码的更改,反之亦然。数据及其定义仅驻留在数据库或代码中的一个位置。两者都不是。这仍然不能回答在什么类型的SQL结构下存储和检索此信息。因为这似乎是关系数据,所以我认为这些信息不应该表示为枚举——因为数据存储中的更改涉及到代码的更改,反之亦然。数据及其定义仅驻留在数据库或代码中的一个位置。两者都不是。我想使用逗号分隔的列表和JSON,但CDL方式似乎更简单。处理颜色的更好方法是只在表中编码rgb值,并在需要绘制时使用它们(假设需要绘制颜色)。我想使用逗号分隔的列表和JSON,但CDL方式似乎更简单。更好的处理颜色的方法是只对表中的rgb值进行编码,并在需要绘制时使用这些值(假设需要绘制颜色)。