Реляционные базы данных - моделирование несбалансированной иерархии
У меня есть некоторые объекты, которые помечены под разными категориями. Тем не менее, некоторые из категорий имеют различные подкатегории (до 2 уровней), но иерархия не является однородной - некоторые с высотой 1 - 2.
Моя идея состояла в том, чтобы создать отдельную таблицу для каждой категории и по одной для каждого из уровней, а затем связать идентификатор объекта с листом, однако это не кажется очень эффективным.
Рад слышать ваши мысли!
1 ответ
Есть более гибкий дизайн:
При поиске сущностей, принадлежащих данной категории, сначала выполните поиск в КАТЕГОРИИ по всем ее подкатегориям, подкатегориям и т. Д. В зависимости от СУБД это может быть потенциально выполнено в одном рекурсивном запросе.
После того, как у вас есть все категории в иерархии, просто присоединитесь к CATEGORY_ENTITY и ENTITY и выполните фильтрацию по этим CATEGORY_ID.
Кстати, название категории должно быть уникальным во всем мире или только среди братьев и сестер? В зависимости от этого, вы можете добавить ограничение UNIQUE для NAME или {PARENT_ID, NAME}1 соответственно.
1 Но проверьте, как ваша СУБД обрабатывает значения NULL в составных уникальных ограничениях.