перечисляет альтернативы - PullRequest
1 голос
/ 19 апреля 2011

Я хочу сохранить цвета команды, но, к сожалению, я использую sqlite, который не поддерживает перечисления. Я хочу хранить цвета команды следующим образом:

id   |   team name   |  team colors

1      vikings           red,orange,white

2      angles            gold,black

Какой путь ?.

Ответы [ 4 ]

4 голосов
/ 19 апреля 2011

Может быть, немного излишним, но как насчет такой структуры?

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 выдаст список нужных вам цветов.

С другой стороны, выможно просто сохранить названия цветов, как у вас есть.Вам придется проанализировать их в вашем приложении.

3 голосов
/ 19 апреля 2011

Самый простой способ (не обязательно лучший при всех условиях) - создать таблицу с именем colors (например):

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

Это твой enum table. Ваши перечисления c ++ могут быть преобразованы в целые, которые затем могут быть использованы в качестве значений первичного ключа. Но если вы храните эти данные в реляционном хранилище, я не думаю, что вы хотите связать их с артефактом уровня кода, таким как enum. Изменение содержимого таблицы должно привести к изменению кода.

Затем, обычным образом, вы создаете таблицу relational attribute, чтобы представить отношения «многие ко многим» между вашими командами и цветовыми перечислениями. Поле color_id соответствует первичному ключу таблицы цветов, а team_id - первичному ключу таблицы команд.

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 голосов
/ 19 апреля 2011

Перечисления можно приводить к целым числам. Скажем, у вас есть

enum Color { red = 1, orange = 2, white = 4, gold = 8, black = 0x10 };
Color teamColor = red | orange | white;
Тогда вы можете сохранить teamColor как целое число (int)teamColor.
0 голосов
/ 19 апреля 2011

Перечисление по сути является int, почему бы тогда не хранить значения int?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...