|
 81.4 Кб |
|
| Добрый вечер.
Подскажите, пожалуйста, как лучше сделать?
Есть таблица, в ней три поля, id, razdel и podrazdel, в этих полях хранится информация о направлениях деятельности разных фирм.
Как это выглядит я прикрепил скриншот.
Вопрос в следующем, лучше будет если разделить информацию с таблицы на две разные или оставить как есть?
Инофрмация с таблицы используется для регистрации новой фирмы на сайте и для вывода информации о всех фирмах по направлениям деятельности. | |
|
|
|
|
|
|
|
для: Slo_Nik
(27.07.2010 в 00:31)
| | Два варианта (закроем глаза на не то русские, не то английские названия полей):
одна таблица со следующей структурой:
id_section
parent_razdel
razdel
либо выделить в отельную таблицу названия разделов, а в таблицу писать только соответствующие id.
Мне просто интересно, что вы будете делать, если появится необходимость переименовать какой-либо раздел..перебирать всю базу - это, имхо, ошибка. | |
|
|
|
|
|
|
|
для: neadekvat
(27.07.2010 в 01:34)
| | изначально таблицу создавал не я, мне надо привести в порядок базу данных, которая и без создания дополнительной таблицы и так большая (72 таблицы).
Хотя Ваш довод показал, что прийдётся разделять таблицу.... | |
|
|
|
|
|
|
|
для: Slo_Nik
(27.07.2010 в 08:24)
| | Я бы на две делила так:
- создать новую таблицу razdel с автоинкрементом, поля id, razdel
- вытянуть в нее все названия разделов
- удалить дубликаты, где названия разделов повторяются
-создать новую таблицу podrazdel с автоинкрементом, поля - id,podrazdel,id_razdel
- перебросить в нее все названия подразделов
- перебросить id разделов из новой таблицы razdel(вот это как-то плохо получается, потому как id наверное руками придется вставлять ) | |
|
|
|
|
|
|
|
для: Лена
(27.07.2010 в 10:42)
| | руками не придется - можно запрос написать.
Но я бы прислушался к совету neadekvat'а и сделал бы дерево разделов на одной таблице - фактура модели не позволяет сделать вывод, что двумя уровнями всё и закончится.
Вернее, позволяет сделать вывод строго обратный - что место в каталоге для каждого элемента будут лишь уточнять.
Это, кстати, напрашивается уже из названия полей раздел/подраздел | |
|
|
|
|
|
|
|
для: Trianon
(27.07.2010 в 11:08)
| | >руками не придется - можно запрос написать.
У меня получается только в два запроса и при том, что в старой таблице нужно создать дополнительное поле с указанием нового id раздела:
old_razdel- старая таблица
new_razdel - новая таблица разделов
podrazdel - новая таблица подразделов
UPDATE old_razdel oldr SET oldr.new_id = nr.id
LEFT JOIN new_razdel nr ON oldr.razdel = nr.razdel //соединяем столбцы по названию разделов
UPDATE podrazdel pr SET pr.id_razdel = oldr.new_id
LEFT JOIN old_razdel oldr ON oldr.razdel = pr.razdel
|
Что-то мне кажется, что это я окольными путями пошла...
>Но я бы прислушался к совету neadekvat'а и сделал бы дерево разделов на одной таблице - фактура модели не позволяет сделать вывод, что двумя уровнями всё и закончится.
>Вернее, позволяет сделать вывод строго обратный - что место в каталоге для каждого элемента будут лишь уточнять.
>Это, кстати, напрашивается уже из названия полей раздел/подраздел
Я в основном так и делаю, когда древовидная структура, другой вариант, думала, проще. | |
|
|
|
|
|
|
|
для: neadekvat
(27.07.2010 в 01:34)
| | >>>Мне просто интересно, что вы будете делать, если появится необходимость переименовать какой-либо раздел..перебирать всю базу - это, имхо, ошибка.
А вот этим воспользоваться нельзя?
("UPDATE data SET ings = ( REPLACE (ings, 'что заменить', 'на что'))",$db);
Устами Лены глаголет истина :). У самого такая же структура. | |
|
|
|
|
 68.7 Кб |
|
|
для: Slo_Nik
(27.07.2010 в 00:31)
| | Лена, сначал так и думал сделать, но останавливало то, что надо делать ещё одну таблицу, а их и так в базе достаточно.
Trianon, думаю, что понял Вас и neadekvat , сделал всё в одной таблице.
Вот что получилось.
id_section INT(3) NIT NULL AUTO_INCREMENT - это понятно
parent_id INT(3) NOT NULL - для связи раздела с подразделом
name_section VARCHAR(100) - имена разделов и подразделов
сначала в базу заносится раздел, для которого значение parent_id устанавливается "0"
помом для раздела заносятся подразделы, для которых значение parent_id равно значению id_section разделов.
для наглядности прилагаю скриншот. цветом отмечены разделы и соответствующие подразделы. | |
|
|
|