"Наследование" в БД

DeltaDIM

Новичок
"Наследование" в БД

Доброго времени суток!
Появилась необходимость реализовать подобие "наследовательности" в записях БД.
Постараюсь пояснить на примере таблицы:

id | name | type | parent_id
1 | name1---- | 1 | 0
2 | name2---- | 3 | 0
3 | name2.1---| -1 | 2
4 | name2.1.1 | -1 | 3
5 | name5---- | 3 | 0
6 | name6---- | 2 | 0
7 | name7---- | 1 | 0
8 | name7.1-- | -1 | 7
9 | name9---- | 1 | 0

id - уникальный код, name - имя, parent_id - id-код родителя, type - некий тип.
у нас здесь построена некая иерархия. поле type может принимать значения 1,2 или 3. В случае если type равняется -1, значение берется с родительской записи.
По примеру записи с id 3, 4 меют type = 3, id 8 type = 1.

Собственно вся проблема в том, можно ли через sql запросы сразу разрешать все наследуемые значения (например для отсекания ненужных типов where type != 3). Возможно использование какой-либо рекурсии, или вообще какие существуют методы для реализации подобного наследования?

Заранее спасибо.
 

DeltaDIM

Новичок
Да, это получается Списки смежности (Adjacency List). Но про наследование по ссылке ничего не нашел.
 

Фанат

oncle terrible
Команда форума
какая проблема получить информацию о родительской записи?
 

DeltaDIM

Новичок
возможны ситуации, что и у родительской записи будет символ наследования (-1). Т.е. вложенная наследовательность.
Как мне сформировать запрос типа SELECT name,type FORM mytable WHERE type = 3?
чтобы в результат попали записи с id 3 и 4 (т.к. у них type при наследовании будет также 3)
 

DeltaDIM

Новичок
если не трудно, дай прямую ссылку, а то эта перекидывает на описание хранения деревьев
 

Фанат

oncle terrible
Команда форума
не буду я ничего давать
не понимаю, почему для извлечения совершенно обычной информации из базы нужен какой-то особенный запрос
 
Сверху