Как лучше сохранить перечисление в один столбец для конкретной записи
От: Suares  
Дата: 27.03.15 16:13
Оценка:
Я может затрону старую тему, которая обсуждалась много раз, но все же не могу найти ответа.

Например создаю БД для фильмов, где есть столбец "Жанр". Тут может быть множество значений, например, "Комедия, Криминал, ...".

Засунуть все в строку и хранить как TEXT?
А если в дальнейшем применять фильтр, т.е. в гуишной части поставить галочку на "Комедия" и выведется весь список комедий, то в таком случая я думаю будет затратно в каждой строке искать подстроку нужную.

Еще у меня есть вариант с перечислением. Определить "enum class Genre" и хранить значения жанра в классе Movie как "std::vector<Genre> genre". Фильтр будет проще применять для поиска конкретного жанра. А хранить в БД буду опять таки все в строке. Только уже созданную по определенному правилу, например, "1;2;3", где цифра — соответствует определенному жанру.

Использую SQLite с Poco библиотеки.
Re: Как лучше сохранить перечисление в один столбец для конкретной записи
От: Tigor Россия  
Дата: 27.03.15 17:55
Оценка: 2 (1) +1
Здравствуйте, Suares, Вы писали:


S>Засунуть все в строку и хранить как TEXT?

S>Еще у меня есть вариант с перечислением. А хранить в БД буду опять таки все в строке.

А почему в строке то? Почему нельзя добавить отдельную таблицу Жанры_Фильма(жанр, фильм)?
К сожалению, в действительности все выглядит иначе, чем на самом деле.
Re: Как лучше сохранить перечисление в один столбец для конкретной записи
От: MasterZiv СССР  
Дата: 29.03.15 12:37
Оценка: 2 (1)
Здравствуйте, Suares, Вы писали:

S>Например создаю БД для фильмов, где есть столбец "Жанр". Тут может быть множество значений, например, "Комедия, Криминал, ...".

S>Засунуть все в строку и хранить как TEXT?

Ни в коем случае.
Таблица "Фильм", таблица "Жанр", и таблица-связь многие-ко-многим.

S>А если в дальнейшем применять фильтр, т.е. в гуишной части поставить галочку на "Комедия" и выведется весь список комедий, то в таком случая я думаю будет затратно в каждой строке искать подстроку нужную.


Да, один из доводов.

S>Еще у меня есть вариант с перечислением. Определить "enum class Genre" и хранить значения жанра в классе Movie как "std::vector<Genre> genre".


Тоже неверно. Жанр -- это не домен, а справочник. По одной простой причине -- новые жанры могут появляться в процессе эксплуатации БД.
В домене же множество возможныз значений изначально ограничено на момент проектирования БД.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.