Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2016, 12:55   #1
Valtasaar
 
Аватар для Valtasaar
 
Регистрация: 27.11.2015
Сообщений: 9
По умолчанию Иерархия в БД

Доброго всем!

Есть задача построить БД с иерархической структурой. Нашел много информации про использование parent_id и использование дополнительной таблицы для хранения структуры. Во всех случаях используется id записи и на его основании строится структура вложенности ( если я, конечно, все правильно понял ). Но как быть если записи часто перезаписываются и соответственно часто меняются id. Бывает так, что из базы одновременно удаляется и вносится более 1000 записей в разных категориях. Тогда при каждой такой операции придется переназначать связку id - parent_id?

У меня вот какой вопрос: возможно ли вместо parent_id указывать имя родительского элемента?
Например:

id | element | parent |
-------------------------
1 | elem 1 |
2 | elem 2 | elem 1 |
3 | elem 3 | elem 2 |
4 | elem 4 | elem 2 |
5 | elem 5 | elem 4 |
Valtasaar вне форума Ответить с цитированием
Старый 09.03.2016, 13:27   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
о как быть если записи часто перезаписываются и соответственно часто меняются id.
Вы что-то делаете не так.
id (от слова identification ) - это уникальный код, однозначно указывающий на некий объект. Он меняться не должен. Совсем.
Это раз.

а во-вторых,
Цитата:
У меня вот какой вопрос: возможно ли вместо parent_id указывать имя родительского элемента?
Ваша жизнь - ваши правила. Можете и так делать.
Только в этом случае имя родительского элемента должно быть УНИКАЛЬНЫМ (т.е. выступать в роли естественного ключа. Это далеко не всегда допустимо и имеет ряд принципиальных недостатков (см. статью А.Тенцера "Искусственные ключи против естественных", например), однако на практике вполне допустимо).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.03.2016, 13:38   #3
Valtasaar
 
Аватар для Valtasaar
 
Регистрация: 27.11.2015
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы что-то делаете не так.
под "перезаписываются" я имел ввиду удаление и последующее добавление такого же элемента. Например, удаление родительского элемента, а потом добавление такого же элемента, с тем же самым именем, но id у него будет уже другой.

За статью спасибо, буду изучать.
Valtasaar вне форума Ответить с цитированием
Старый 09.03.2016, 13:51   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
под "перезаписываются" я имел ввиду удаление и последующее добавление такого же элемента.
смысл сего действия? Зачем удалять объект, чтобы его тут же добавить?

Цитата:
Например, удаление родительского элемента, а потом добавление такого же элемента, с тем же самым именем
Опять же, так нельзя делать. Подумайте, ведь если удаляется родительский элемент, то при этом все его потомки окажутся ссылающимися на НЕСУЩЕСТВУЮЩИЙ узел. Так не должно быть.

Похоже, что Вам придётся менять логику приложения, где всё удаляется, а потом заново добавляется. Так тоже можно делать, но тогда нужно удалять всё - и родителей и потомков, а потом, при добавлении новых элементов прописывать заново новую иерархию.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.03.2016, 14:29   #5
Valtasaar
 
Аватар для Valtasaar
 
Регистрация: 27.11.2015
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Похоже, что Вам придётся менять логику приложения
Да, похоже на то. На как! Чет я совсем запуталси.

Давайте рассмотрим на примере сотрудников. Мне на примерах проще понимать.

Есть несколько уровней иерархии и некоторое количество сотрудников. Во вложении.

Таким образом получается, что поле с сотрудником одновременно является и категорией. При удалении или добавлении сотрудника, удаляется/добавляется категория. Как это правильно обработать?
Изображения
Тип файла: png emp.PNG (14.9 Кб, 41 просмотров)
Valtasaar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Иерархия (с#) s4egol Помощь студентам 0 30.11.2014 11:48
Иерархия классов на C# s4egol Помощь студентам 4 05.09.2014 07:41
Иерархия С# Skull_psyhothik Помощь студентам 2 22.03.2013 01:41
иерархия наследования WizarD.89 Общие вопросы по Java, Java SE, Kotlin 1 07.11.2012 23:31
Иерархия skyline_skyline Microsoft Office Excel 3 04.09.2009 13:00