SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 06.03.2013 05:23:56

construktor
Участник
Зарегистрирован: 06.03.2013
Сообщений: 7

Создание рубрикатора

Вы как никто знаете ответ на этот вопрос.
Нужно создать рубрикатор, категории, подкатегории, подподкатегории.
Как лучше сделать
Во-первых с помощью одной, или трех таблиц.
Во-вторых, как сделать такой рубрикатор максимально производительным.

Неактивен

 

#2 06.03.2013 13:00:41

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Создание рубрикатора

Возникает сразу вопрос - уровень подпод...подкатегорией  ограничен?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 06.03.2013 13:38:03

construktor
Участник
Зарегистрирован: 06.03.2013
Сообщений: 7

Re: Создание рубрикатора

Делать безграничный уровень вложенности особой нужды нет.
Или даже так. Вполне хватит трехуровневой вложенности, если от этого зависит производительность. Т.к. вывод самого рубрикатора, будет происходить почти на каждой странице, то считаю важным отдать предпочтение именно производительности.
Но если есть возможность сделать безграничный уровень вложенности, не влияющий на производительность, то это было бы супер.

Неактивен

 

#4 06.03.2013 14:03:49

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Создание рубрикатора

Производительность - понятие расплывчатое - надо понять, какие операции часто будут делаться, какие - нет. Ибо при каком-то способе хранения дерева эффективно делается вставка и неэффективно поиск - и наоборот.

Вообще, конечно, если проектировать именно на трёхуровневую вложенность (то есть три таблички создать отдельных для категорий, подкатегорий и подподкатегорий), то проще и шустрее получится, чем если делать полноценную
древесную структуру (неограниченная вложенность - это дерево).

Подробно про то, как хранить древесные структуры в базе, описано в третьей главе "Простые деревья" в книге Билла Карвина "Программирование Баз Данных SQL. Типичные ошибки и устранение". Собственно, всю книгу исключительно рекомендую к прочтению smile.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 06.03.2013 14:09:53

construktor
Участник
Зарегистрирован: 06.03.2013
Сообщений: 7

Re: Создание рубрикатора

Т.е. нет возможности создать производительный рубрикатор используя только одну таблицу, как если бы использовались 3?

Неактивен

 

#6 06.03.2013 14:17:57

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Создание рубрикатора

Сложно говорить про производительность в общем виде wink, см. выше. Через одну таблицу - рабочее решение, да.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 06.03.2013 14:25:43

construktor
Участник
Зарегистрирован: 06.03.2013
Сообщений: 7

Re: Создание рубрикатора

Предложите, тогда пожалуйста, какой-нибудь максимально производительный Вариант рубрикатора. Т.е. структура в целом понятна.

№ 1 влож-категории | название
№ 2 влож-категории | название | № 1 влож-категории
№ 3 влож-категории | название | № 2 влож-категории.

А как должны выглядеть эти таблицы. Какие индексы, ключи использовать или еще что-то?
Как лучше делать вызов рубрикатора?

Неактивен

 

#8 06.03.2013 14:56:25

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Создание рубрикатора

Я уже несколько раз писал про то, что производительность - широкое понятие, надо уточнять.
Не могу Вам больше ничего подсказать, впрочем Вы и не читаете мои ответы.
Что до индексов - то они ставятся уже на конкретные запросы.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#9 06.03.2013 15:16:02

construktor
Участник
Зарегистрирован: 06.03.2013
Сообщений: 7

Re: Создание рубрикатора

Ваш совет, прочитать книгу на 400 страниц. Я как бы не против, но вопрос времени. Надеялся получить совет, ответ, от опытных участников форума, часто работающих с sql и знающих все ее тонкости и особенности. Набившим шишек и изучившим работу mysql от а до я.
По производительности не очень понятно, насколько этот вопрос может быть широк. Я смотрю с той стороны, чем быстрее выполняется запрос, тем он производительнее. Соответственно цель,
1) сделать максимально быстрый запрос для получения дерева.
2) сделать максимально быструю выборку данных привязанных в  соответствии с рубрикатором по id и like.

Неактивен

 

#10 06.03.2013 17:14:14

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Создание рубрикатора

описано в третьей главе

Уверяю, там поменьше, чем 400 страниц smile.
Запрос дерева путём однотабличного метода получается не очень эффективным. Остальными - получше, но сложнее в реализации.
Если точно хватает того уровня вложенности, который Вы изначально хотели (рубрика, подрубрика, подподрубрика), то я бы сделал три таблицы - для рубрики, подрубрики и подподрубрики соответственно.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#11 06.03.2013 18:14:49

construktor
Участник
Зарегистрирован: 06.03.2013
Сообщений: 7

Re: Создание рубрикатора

Ладно. Ясно. Буду читать. Но если есть еще какие-то конкретные предложения по быстрому рубрикатору, то буду рад их вычитать.

Неактивен

 

#12 06.03.2013 22:41:19

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Создание рубрикатора

Все зависит от запросов которые вам надо будет делать.

Самый простой и быстрый вариант с ограничением до 3 уровней
grandfather_id
facher_id
child_id

Неограниченное количество уровней, в некоторых случаях с тяжелыми выборками
parent_id
child_id

Неограниченное количество уровней, более гибкий вариант
parent_id
level_id
child_id

Неактивен

 

#13 06.03.2013 23:46:28

construktor
Участник
Зарегистрирован: 06.03.2013
Сообщений: 7

Re: Создание рубрикатора

evgeny написал:

Все зависит от запросов которые вам надо будет делать.
Самый простой и быстрый вариант с ограничением до 3 уровней
grandfather_id
facher_id
child_id

Чем этот Вариант быстрее, описанного мною выше?

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson