Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как организовать модель, для иерархии юзеров 
:(
    Опции темы
Pankon
Дата 17.10.2006, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 739
Регистрация: 2.6.2005

Репутация: нет
Всего: 5



Задача в следующем...

Есть персонал, для которого нужно организовать авторизацию на веб странице(это еще не проблема).
При этом персоны из этого персонала относятся к друг другу как 
начальник_уровень0(Персона1, Персона2)   //Персона1 есть начальник персоны2;
начальник_уровень1(Персона1, Персона2) 
начальник_уровень2(Персона1, Персона2) 
...
Графически - это дерево...

Подумав немного можно предложить такую модель:
Все Персоны хранить в таблице Персонал, где иметь поле начальник со значениями: начальник0, начальник1, начальник2
Завести дополнительные таблицы начальник_уровень0,начальник_уровень1,начальник_уровень2,... где и связывать иерархию персон по ID
(можно завести только одну таблицу начальник_уровень, где завести еще поле тип_иерархии:уровень0,уровень1,уровень2)

Но такие модели не предусматривают проверку, что началник0 в иерархии, есть действительно начальник для персон(ы) из уровня 1, а не из 2
(начальник уровня0  НЕ может быть начальником персоны из уровня 2, только для 1(это ДЕРЕВО))

Как все-таки организовать такую модель?


ПС. Можно, конечно, завести разные таблицы для всех персон из разных уровней и затем их связывать - тут ошибок быть не может...
PM MAIL   Вверх
LSD
Дата 17.10.2006, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Что-то я непонял что значит уровень. 
И получается:
Цитата(Pankon @  17.10.2006,  14:40 Найти цитируемый пост)
начальник_уровень1(Персона1, Персона2) 
начальник_уровень2(Персона1, Персона2) 

у тебя между Персона1 и Персона2 - две связи? Тогда это не дерево.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Pankon
Дата 17.10.2006, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 739
Регистрация: 2.6.2005

Репутация: нет
Всего: 5



Цитата(LSD @  17.10.2006,  16:19 Найти цитируемый пост)
у тебя между Персона1 и Персона2 - две связи? 
нет.
Персона1 и Персона2 понятия собирательные... 
Читай  
начальник_уровень0("Иванов", "Петров") 
начальник_уровень0("Краснов", "Шубейко") 
начальник_уровень1("Петров", "Скаба") 
начальник_уровень1("Петров", "Турбин") 
начальник_уровень1("Петров", "Кашкин") 
начальник_уровень2("Скаба", "Перышкин") 
начальник_уровень2("Скаба", "Крышин")

PM MAIL   Вверх
LSD
Дата 17.10.2006, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Класически дерево хранится в виде указателя на родительский объект. Т.е. в данном случае:
Цитата
"Иванов" родитель: "Петров"
"Шубейко" родитель "Краснов"
"Скаба" родитель: "Петров"
...

Если под уровнем понимается глубина в дереве, то она не хранится, но ее можно вычислить.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Pankon
Дата 18.10.2006, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 739
Регистрация: 2.6.2005

Репутация: нет
Всего: 5



Цитата(LSD @  17.10.2006,  23:32 Найти цитируемый пост)
Если под уровнем понимается глубина в дереве, то она не хранится, но ее можно вычислить. 
 я думаю, это усложнит обслуживание, т.к. под словом "начальник_уровеньN" подразумевается разные N отношений, примерно так

начальникПодразделенияИмеетПочиненногоНачальникОтдела("Иванов", "Петров") 
начальникПодразделенияИмеетПочиненногоНачальникОтдела("Краснов", "Шубейко") 
начальникОтделаИмеетПочиненногоНачальникЛаборатории("Петров", "Скаба") 
начальникОтделаИмеетПочиненногоНачальникЛаборатории("Петров", "Турбин") 
начальникОтделаИмеетПочиненногоНачальникЛаборатории("Петров", "Кашкин") 
начальникЛабораторииИмеетПочиненногоНачальникЛаборанской("Скаба", "Перышкин") 
начальникЛабораторииИмеетПочиненногоНачальникЛаборанской("Скаба", "Крышин")

Добавлено @ 10:07 
И как я уже говорил:
начальникПодразделения может имееть починенных только НачальникОтдела 
НачальникОтдела может имееть починенных только НачальникЛаборатории
НачальникЛаборатории может имееть починенных только НачальникЛаборанской

А это и есть проблема - какая должна быть модель, что бы "нельзя было нарушить" эти условия? 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0448 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.