Суть: есть категории N штук в таблице базы. Есть объекты в другой таблице. Соотношение объект->категория : 1->много.
Как правильно реализовать связь, чтоб было оптимально: то ли в таблице объекты создавать булевские столбцы со всеми id категориями, то ли нормализировать с возникновением ещё одной таблицы где опять же id-шки объектов и всех категорий? Может есть готовый оптимизированный алгоритм? Или процедурка какая, чтоб в mySQL массив запихнуть? Или можно массив в базу напрямую запихнуть, а я не доглядел поддержки такого типа данный?
Спустя 17 минут, 32 секунды (8.10.2011 - 12:33) Игорь_Vasinsky написал(а):
массивы в БД не оч хорошая мысль хранить.
Ты покажи на примере - чё за структура и в чём проблема.
Ты покажи на примере - чё за структура и в чём проблема.
Спустя 2 часа, 5 минут, 6 секунд (8.10.2011 - 14:38) dzen написал(а):
Пример:
объект - фильм
может относиться к нескольким жанрам (категориям): триллер, детектив и драма, скажем.
Фильмы сидят в таблице t_films.
Жанры - в t_category: id_category / name_category
........................................ 1................... триллер
........................................ 2 ...................детектив
........................................ 3................... драма
........................................ 4................... фантастика
Прикол в чём: фильм может относиться к нескольким категориям или к одной.
Если к одной - не вопрос. В таблице фильмов добавляем idcategory и есть связь 1 к 1. Но если фильм относится к двум категориям, или к трём, или к пяти... ? Реализовать я это могу, но хочу это сделать правильно. Плюс категории теоретически могут добавляться. Вот так в общем.
объект - фильм
может относиться к нескольким жанрам (категориям): триллер, детектив и драма, скажем.
Фильмы сидят в таблице t_films.
Жанры - в t_category: id_category / name_category
........................................ 1................... триллер
........................................ 2 ...................детектив
........................................ 3................... драма
........................................ 4................... фантастика
Прикол в чём: фильм может относиться к нескольким категориям или к одной.
Если к одной - не вопрос. В таблице фильмов добавляем idcategory и есть связь 1 к 1. Но если фильм относится к двум категориям, или к трём, или к пяти... ? Реализовать я это могу, но хочу это сделать правильно. Плюс категории теоретически могут добавляться. Вот так в общем.
Спустя 10 минут, 57 секунд (8.10.2011 - 14:49) Игорь_Vasinsky написал(а):
Цитата |
Плюс категории теоретически могут добавляться. |
ну тут только один тогда вариант я вижу:
table `films`
id | name | year | description | actors | director
и далее таблицы категорий
table `category`
id| comedy | counts (сколько фильмов в категории, чтоб лишний раз не слать запрос на подсчёт)
id |fantasy | counts
и далее таблицы категорий
table `comedy`
id | id_films (пишешь через запятую)
table `horror`
id | id_films
Спустя 1 минута, 53 секунды (8.10.2011 - 14:51) dzen написал(а):
Или может в films лучше id_categorys через запятую? Ну чтоб быстрее работало?
Спустя 3 минуты, 53 секунды (8.10.2011 - 14:55) Игорь_Vasinsky написал(а):
А откуда инфо, что быстрее будет?
В моём варианте JOINами выборку делать нужно будет, и в таблицах всё по полочкам
В моём варианте JOINами выборку делать нужно будет, и в таблицах всё по полочкам
Спустя 12 минут, 45 секунд (8.10.2011 - 15:07) dzen написал(а):
Но ведь join будет подключать количество таблиц, равное количеству категорий, а так (если в таблице фильма в одном поле через запятую id категорий посадить) - 2 таблицы подгружаются. И что там строки перебирать, что там.
Спустя 6 минут, 26 секунд (8.10.2011 - 15:14) Игорь_Vasinsky написал(а):
Запрос то всего один будет, просто совмещённый, ну это дело вкуса, я бы так делал.
Спустя 12 минут, 36 секунд (8.10.2011 - 15:26) dzen написал(а):
Игорь_Vasinsky, благодарю за совет.
Спустя 1 день, 16 часов, 41 минута, 30 секунд (10.10.2011 - 08:08) linker написал(а):
Короче, чего вы не знаете как нормализовать базу?
Таблица Films
id name
--------------------------
1 Восставшие из ада
2 Живые мертвецы
Таблица Category
id name
--------------------------
1 Ужасы
Таблица Films2Cat
id_cat id_film
--------------------------
1 1
1 2
Допустим мы выбрали жанр ужасы, как нам получить все фильмы?
Таблица Films
id name
--------------------------
1 Восставшие из ада
2 Живые мертвецы
Таблица Category
id name
--------------------------
1 Ужасы
Таблица Films2Cat
id_cat id_film
--------------------------
1 1
1 2
Допустим мы выбрали жанр ужасы, как нам получить все фильмы?
SELECT `Films`.* FROM `Films2Cat`
INNER JOIN `Films` ON `Films`.`id` = `Films2Cat`.`id_film`
WHERE `Films2Cat`.`id_cat` = 1
Спустя 12 часов, 41 минута, 59 секунд (10.10.2011 - 20:50) dzen написал(а):
Точно, уже догнал.