Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Иерархия в БД

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Valtasaar
Отправлено: 09 Марта, 2016 - 11:46:37
Post Id



Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Нояб. 2015  


Помог: 0 раз(а)




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

Есть задача построить БД с иерархической структурой. Нашел много информации про использование 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 |

(Отредактировано автором: 09 Марта, 2016 - 11:47:15)

 
 Top
Мелкий Супермодератор
Отправлено: 09 Марта, 2016 - 12:10:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Поясните ещё раз, почему у вас часто изменяются id. Почему строки заменяются с изменением id, но вложенные множества остаются привязаны именно к этому новому элементу.


-----
PostgreSQL DBA
 
 Top
Valtasaar
Отправлено: 09 Марта, 2016 - 12:26:44
Post Id



Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Нояб. 2015  


Помог: 0 раз(а)




Мелкий пишет:
почему у вас часто изменяются id

Потому что часто происходит удаление/добавление элементов и соответственно id удаленного элемента уже не существует.

Может я изначально думаю не в ту сторону?

У меня есть несколько категорий, которые редко изменяются, и множество элементов в этих категориях, которые постоянно удаляются/добавляются. Нужно их как-то связать.
 
 Top
Мелкий Супермодератор
Отправлено: 09 Марта, 2016 - 12:42:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Ещё раз: почему у вас часто меняются id родительских элементов так, что для их потомков требуется обновлять ссылку на родителя.

Valtasaar пишет:
У меня есть несколько категорий, которые редко изменяются, и множество элементов в этих категориях, которые постоянно удаляются/добавляются.

Эта постановка вопроса звучит так, как будто у вас вообще нет дерева, а только ссылка на категорию. Тогда почему у вас постоянно меняется id родителя? Категории же, как следует из этой же цитаты, достаточно стабильны.


-----
PostgreSQL DBA
 
 Top
Valtasaar
Отправлено: 09 Марта, 2016 - 13:34:05
Post Id



Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Нояб. 2015  


Помог: 0 раз(а)




Мелкий пишет:
Категории же, как следует из этой же цитаты, достаточно стабильны.

Категории да, но структура самой таблицы похоже не верная.

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

Таким образом получается, что поле с сотрудником одновременно является и категорией. При удалении или добавлении сотрудника, удаляется/добавляется категория. Как это правильно обработать?
Прикреплено изображение (Нажмите для увеличения)
emp.PNG

(Отредактировано автором: 09 Марта, 2016 - 13:34:25)

 
 Top
Мелкий Супермодератор
Отправлено: 09 Марта, 2016 - 13:45:45
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Valtasaar пишет:
При удалении или добавлении сотрудника, удаляется/добавляется категория

Почему?

Опишите предметную область.

Сферическая схема подчинённости сотрудников: сотрудники отдельно, должности сотрудников отдельно (!), дерево должностной иерархии отдельно.


-----
PostgreSQL DBA
 
 Top
Valtasaar
Отправлено: 09 Марта, 2016 - 14:23:35
Post Id



Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Нояб. 2015  


Помог: 0 раз(а)




Мелкий пишет:
Почему?

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

Мелкий пишет:
Сферическая схема подчинённости сотрудников: сотрудники отдельно, должности сотрудников отдельно (!), дерево должностной иерархии отдельно.

Получается несколько таблиц или все в одной можно сделать?
 
 Top
Мелкий Супермодератор
Отправлено: 09 Марта, 2016 - 15:35:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Всего один непосредственный начальник? Вы из какого-то параллельного мира Радость

Valtasaar пишет:
Допустим если я из примера удалю сотрудника с именем 6, то как быть с его подчиненными?

Повесить их в подчинённость кому-нибудь ещё.
Как вас спасёт имя родительского элемента вместо id? Всё равно обновлять эти записи с указанием нового руководителя.

Не знаю вашей предметной области, для моей организации можно было бы использовать какую-то такую схему:
сотрудники отдельно, здесь нет данных о должностях и начальниках.
должности отдельно. Здесь, если вообще нужны, данные о абстрактных должностях: совет директоров, начальник отдела, тимлид
Структура организации, описывающая как раз отношения между должностями. Например, ветвь для рядового разработчика: в корне совет учредителей, затем руководитель отдела ААА, тимлид, разработчик.
Другой разработчик в ветке совет учредителей, затем руководитель отдела БББ, тимлид, разработчик.
При этом, например, тимлид отдела ААА - учредитель (внимание, кольцо!), а руководители обоих отделов - один и тот же человек.


-----
PostgreSQL DBA
 
 Top
Valtasaar
Отправлено: 10 Марта, 2016 - 11:25:18
Post Id



Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Нояб. 2015  


Помог: 0 раз(а)




Плавно перешли от иерархии к связи таблиц Радость

Значит, в данном случае нужно создать две таблицы: одна с сотрудниками, другая с должностями. В таблице с сотрудниками нужно будет хранить колонку с указанием id должности. Иерархию строить уже запросами. Так я понял?

Как-то так:
Прикреплено изображение (Нажмите для увеличения)
1.png

(Отредактировано автором: 10 Марта, 2016 - 11:58:21)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB