![]() |
|
Модераторы: gambit |
![]()
|
|
| Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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(это ДЕРЕВО)) Как все-таки организовать такую модель? ПС. Можно, конечно, завести разные таблицы для всех персон из разных уровней и затем их связывать - тут ошибок быть не может... |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
По поводу деревьев на основе БД, см. статьи на rsdn:
http://www.rsdn.ru/article/db/Hierarchy.xml http://www.rsdn.ru/article/db/Dewey.xml http://www.rsdn.ru/article/db/db_nav1.xml -------------------- ![]() |
|||
|
||||
| Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: нет Всего: 5 |
mr.DUDA, спасибо, почитал, много интересного, но проблема не решена... думаю дальше...
|
|||
|
||||
| sleep_walker |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 18.10.2006 Репутация: нет Всего: нет |
Предлагаю такое решение. Всю информацию хранить в одной таблице - персонал(id_person, id_per_shef,....) - там где многоточие может быть любая доп информация. Получается такая структура:
(1, 0,...) (2, 1,...) (3, 0,...) (4, 3,...) (5, 4,...) (6, 4,...) (7, 2,...) (8, 2,...) Запись где id_per_shef = 0 - корень. В данном случае имеем 2 корня(2 начальников Структура достаточно удобная - проверено на практике. |
|||
|
||||
| Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: нет Всего: 5 |
||||
|
||||
| sleep_walker |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 18.10.2006 Репутация: нет Всего: нет |
Ну дык это совсем не проблема. Можно добавить 3 поле - уровень:
(1, 0, 1...) (2, 1, 2...) (3, 2, 3...) (4, 2, 3...) А далее на эту табличку прописать триггер на insert, в котором проверять - если вставляется запись (5, 1, 3...), то смотреть уровень родителя и если уровень вставляемой записи минус уровень родителя = 1, то разрешить транзакцию, иначе отменить... И триггер на update, тоже - если апдейтится поле уровень, то выполнять аналогичную проверку. |
|||
|
||||
| Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: нет Всего: 5 |
sleep_walker, спасибо за предложение...
Но вопрос был Как все-таки организовать такую модель? Использование триггеров это уже "искусственный" fix... |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Pankon, реляционные БД потому и реляционные что не имеют поддержки иерархических данных в рамках одной таблицы.
-------------------- ![]() |
|||
|
||||
| Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: нет Всего: 5 |
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |