Вложени комплекти в MySQL
Всеки програмист рано или късно трябва да се справи с вложен набор (известен като дърво или йерархия) в релационни бази данни. В тази публикация ще опиша специален случай на работа с такъв набор - моделът вложени комплекти (по-долу просто вложени комплекти).
Вложени комплекти предполага даване на всеки възел в дървото по два допълнителни клавиша ляв и десен клавиш. За да попълним тези ключове, ще трябва да преминем изцяло цялото дърво, като посетим всеки от възлите два пъти. В резултат на това изборът от дървото ще бъде доста бърз. От друга страна, промяната на структурата изисква преизчисляване на всички ключове в възлите, следващи възела, който се променя.
В бази данни, които не поддържат рекурсивни заявки (например MySQL), изборът от дърво е по-бърз, отколкото ако е направен със съхранена процедура.
Промените в базата данни отнемат много време, тъй като трябва да актуализирате всички леви и десни клавиши в записите след променените.
Диаграмата показва прост пример за вложени набори:
Какви селекции могат да се правят?
- Всички дървесни възли
ИЗБЕРЕТЕ * ОТ дърво ПОРЪЧКА ПО left_key - Избор на дъщерни възли
ИЗБЕРЕТЕ * ОТ дърво КЪДЕ left_key> = $ left_key И right_key = $ right_key ПОРЪЧАЙТЕ от left_key - Избор на клон, в който възелът участва
ИЗБЕРЕТЕ * ОТ дърво КЪДЕ right_key> $ left_key И left_key
Конкретни примери
По време на работа се сблъсках със задачата да заредя класификатора OKDP в MySQL, който съдържа повече от 44 хиляди позиции, а предпоставка беше използването на модела на вложени комплекти. Класификаторът се разпространява като архив, който съдържа около 15 файла в XML формат.
Стана ясно, че би било много по-ефективно просто да заредите класификатора в базата данни и едва след това да изградите левия и десния клавиш. За това беше написана следната процедура, която ми свърши работа за 15 минути:
- Вложени комплекти
- Поддържани от конзолата бар плотове 33 вдъхновяващи идеи за плотове от MDF, дърво и стъкло
- Отглеждане на орел ябълково дърво, неговите характеристики, външния вид на дървото и плодовете, съдържанието на полезни
- Изравняване на пода под ламинат ефективни рецепти за дърво и бетон
- T-SQL, вложени изявления в съвкупни функции