понедельник, 7 марта 2011 г.

Заменитель hierarchyid в MySQL и других базах

Почти каждому программисту когда-либо приходилось создавать таблицу вроде: Category (CategoryID, Name, ParentCategoryID). Это так называемая The Adjacency List Model. Работать с ней довольно легко, когда у тебя только два-три уровня; но если больше, то обычно возникают сложности.

Если вы работаете с MS SQL 2008, то для работы с деревьями очень удобно использовать новый тип данных hierarchyid. Но что делать тем, у кого MySQL?

Нашёл отличную статью про The Nested Set Model, которая решает многие проблемы. Правда, упрощая чтение данных, она усложняет модификацию дерева. Но для многих приложений это приемлимо.

Описанный метод в принципе можно применять не только с MySQL, а и с любой другой реляционной базой данных, которая не поддерживает деревья out-of-the-box.

1 комментарий:

Байдарочник комментирует...

Круто! Left Join - действительно впечатляет! Даже представить не мог, что можно так конструировать SQL-запрос!

Ratings by outbrain