[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как реализовать?
dzen
Товарищи, проблема может и детская, но не знаю где копать.
Суть: есть категории 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. Но если фильм относится к двум категориям, или к трём, или к пяти... ? Реализовать я это могу, но хочу это сделать правильно. Плюс категории теоретически могут добавляться. Вот так в общем.

Спустя 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ами выборку делать нужно будет, и в таблицах всё по полочкам

Спустя 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

Допустим мы выбрали жанр ужасы, как нам получить все фильмы?
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 написал(а):
Точно, уже догнал.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.