Заранее прошу не ругатся и не тыкать пальцем с криками нуб, я только студент 2 курса и мне нужна помощь.
Тут база данных каталога фильмов. По заданию обязательно надо сделать одну рекурсивную таблицу.
Посоветовали сделать рекурсию в жанрах по категориям, например: Для детей - Фэнтези, Анимэ, Мультфильм, Для взрослых - Анимэ, Порн, Боевик и т.д. Слева направо выделенные таблицы - Фильмы (ИД Фильм, Название, ИД Студия, Дата выпуска, ИД Формат ), Соединительная таблица Фильмов и жанров (ИД Фильм, ИД Жанр), Жанры ( ИД Жанр, Название ).
Можете ли нарисовать схему такой рекурсивной таблицы, что бы было понятно как её запрограммировать, что-бы было видно какое поле на какое ссылается. Заранее спасибо. Надеюсь на помощь.
Ссылки на хост: http://imageshost.ru/photo/98808/id1918800.html
Вложение | Размер |
---|---|
Capture.JPG | 36.98 kb |
Схему рисовать не буду.
Схему рисовать не буду. Отмечу только что все рекурсивные таблицы строятся по одному принципу.
Простейший пример
Таблица:
Поле 1: ID
Поле 2: Родительский ID
Поле N: разное содержимое
Думаю, что уже стало всё понятно, нет?
Если нет, продолжу. Поле ID является первичным ключём и однозначно характеризует запись в таблице. Поле "Родительский ID" говорит о том, чьим потомком (подразделом, подкатегорией) является данная запись. У корневых записей (которые не являются чьим-либо потомками), поле "Родительский ID" имеет значение NULL (можно и 0, например или ещё какое специальное - решать вам)
Соответственно, чтобы поднять всю цепочку, нужно выполнить рекурсивно несколько последовательных запросов, до тех пор пока не встретится запись с "Родительский ID" равно NULL. В PostgreSQL это впрочем можно выполнить одним запросом с WITH (http://postgresql.ru.net/manual/queries-with.html#QUERIES-WITH-SELECT)