Задавайте вопросы, мы ответим
Вы не зашли.
Вы как никто знаете ответ на этот вопрос.
Нужно создать рубрикатор, категории, подкатегории, подподкатегории.
Как лучше сделать
Во-первых с помощью одной, или трех таблиц.
Во-вторых, как сделать такой рубрикатор максимально производительным.
Неактивен
Возникает сразу вопрос - уровень подпод...подкатегорией ограничен?
Неактивен
Делать безграничный уровень вложенности особой нужды нет.
Или даже так. Вполне хватит трехуровневой вложенности, если от этого зависит производительность. Т.к. вывод самого рубрикатора, будет происходить почти на каждой странице, то считаю важным отдать предпочтение именно производительности.
Но если есть возможность сделать безграничный уровень вложенности, не влияющий на производительность, то это было бы супер.
Неактивен
Производительность - понятие расплывчатое - надо понять, какие операции часто будут делаться, какие - нет. Ибо при каком-то способе хранения дерева эффективно делается вставка и неэффективно поиск - и наоборот.
Вообще, конечно, если проектировать именно на трёхуровневую вложенность (то есть три таблички создать отдельных для категорий, подкатегорий и подподкатегорий), то проще и шустрее получится, чем если делать полноценную
древесную структуру (неограниченная вложенность - это дерево).
Подробно про то, как хранить древесные структуры в базе, описано в третьей главе "Простые деревья" в книге Билла Карвина "Программирование Баз Данных SQL. Типичные ошибки и устранение". Собственно, всю книгу исключительно рекомендую к прочтению .
Неактивен
Т.е. нет возможности создать производительный рубрикатор используя только одну таблицу, как если бы использовались 3?
Неактивен
Сложно говорить про производительность в общем виде , см. выше. Через одну таблицу - рабочее решение, да.
Неактивен
Предложите, тогда пожалуйста, какой-нибудь максимально производительный Вариант рубрикатора. Т.е. структура в целом понятна.
№ 1 влож-категории | название
№ 2 влож-категории | название | № 1 влож-категории
№ 3 влож-категории | название | № 2 влож-категории.
А как должны выглядеть эти таблицы. Какие индексы, ключи использовать или еще что-то?
Как лучше делать вызов рубрикатора?
Неактивен
Я уже несколько раз писал про то, что производительность - широкое понятие, надо уточнять.
Не могу Вам больше ничего подсказать, впрочем Вы и не читаете мои ответы.
Что до индексов - то они ставятся уже на конкретные запросы.
Неактивен
Ваш совет, прочитать книгу на 400 страниц. Я как бы не против, но вопрос времени. Надеялся получить совет, ответ, от опытных участников форума, часто работающих с sql и знающих все ее тонкости и особенности. Набившим шишек и изучившим работу mysql от а до я.
По производительности не очень понятно, насколько этот вопрос может быть широк. Я смотрю с той стороны, чем быстрее выполняется запрос, тем он производительнее. Соответственно цель,
1) сделать максимально быстрый запрос для получения дерева.
2) сделать максимально быструю выборку данных привязанных в соответствии с рубрикатором по id и like.
Неактивен
описано в третьей главе
Уверяю, там поменьше, чем 400 страниц .
Запрос дерева путём однотабличного метода получается не очень эффективным. Остальными - получше, но сложнее в реализации.
Если точно хватает того уровня вложенности, который Вы изначально хотели (рубрика, подрубрика, подподрубрика), то я бы сделал три таблицы - для рубрики, подрубрики и подподрубрики соответственно.
Неактивен
Ладно. Ясно. Буду читать. Но если есть еще какие-то конкретные предложения по быстрому рубрикатору, то буду рад их вычитать.
Неактивен
Все зависит от запросов которые вам надо будет делать.
Самый простой и быстрый вариант с ограничением до 3 уровней
grandfather_id
facher_id
child_id
Неограниченное количество уровней, в некоторых случаях с тяжелыми выборками
parent_id
child_id
Неограниченное количество уровней, более гибкий вариант
parent_id
level_id
child_id
Неактивен
evgeny написал:
Все зависит от запросов которые вам надо будет делать.
Самый простой и быстрый вариант с ограничением до 3 уровней
grandfather_id
facher_id
child_id
Чем этот Вариант быстрее, описанного мною выше?
Неактивен