Организация БД

Asar

Новичок
Организация БД

Имеется каталогообразная система. 1 таблица, в ней поля для характеристик, Id элемента, код родителя (его Id в этой же таблице), код уровня.

Пример цепочки: Животные -> Насекомые -> Тараканоподобные -> Тараканообразные -> Таракановые -> Настоящие тараканы -> Таракан -> домашний

Все бы хорошо, но.

Для самого нижнего уровня полным именем является его имя + имя родителя. Т. е. "Таракан домашний", а не "домашний". Соответственно, приходится делать лишний запрос. При этом за раз может быть выборка, к примеру, из 50-100 элементов нижнего уровня -- т. е. 50-100 лишних запросов.
Вопрос: стоит ли заделать лишнее поле, куда автоматом вписывать название родителя для каждого элемента нижнего уровня, чтобы не делать лишних запросов? Т. е. что лучше -- лишнее поле или лишние запросы?

Часто бывает нужно вывести всех родителей в цепочке для данного элемента. Опять лишние запросы к БД.
Вопрос: стоит ли аналогично лепить лишнее поле с готовой цепочкой родителей и выводить эту цепочку напрямую оттуда или все же делать лишние запросы?
 

zerkms

TDD infected
Команда форума
нормализация и оптимизация - 2 полюса
твоя работа как проектировщика БД - найти приемлемый компромисс
 

hermit_refined

Отшельник
приходится делать лишний запрос
не вижу здесь лишнего запроса. объединение таблицы с самой собой - да.
т. е. 50-100 лишних запросов
при любой логике это нонсенс. откройте для себя волшебное условие IN (...)
зависит от объема таблиц, частоты изменения данных и т.д. универсального рецепта нет.
напишите нормальные запросы с самообъединением, и посмотрите, что получится.
(хотя, учитывая, что домашний таракан никогда домашней рыбкой не станет - сохранять полное наименование монстра вполне естественно.)
 
Сверху