Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Firebird, Interbase > иерархия или master&detail


Автор: santilaas 8.2.2006, 04:35
СУБД - Firebird, Язык - Delphi6

Имеется несколько связанных таблиц, скажем "Организации", "Филиалы", "Отделы".

Вопрос: при создании БД лучше создать одну таблицу (по иерархическому принципу)
или связать эти 3 таблицы по принципу master-detail???

Какой подход лучше в плане быстродействия и с т.з. лёгкости создания приложения


Автор: Alex 8.2.2006, 11:26
http://ibase.ru/develop.htm#tree

Автор: santilaas 14.2.2006, 06:21
Alex, а вообще если, одни и те же таблицы можно связать по иерархическому принципу и через master-detail, то с точки зрения рациональности и эффективности какой вариант лучше? Просто я всегда работал с master-detail, а может за иерархией (для некоторых случаев) стоит быстродействие.

Автор: Linco 14.2.2006, 09:51
ИМХО Мастер-деталь классический способ представления данных предусмотренный стандартами РСУБД, деревья и другие отличные структуры - извращения, имеют смысл только если задача очень этого требует.

Автор: Alex 14.2.2006, 10:29
Цитата(Linco @ 14.2.2006, 09:51 Найти цитируемый пост)
ИМХО Мастер-деталь классический способ представления данных предусмотренный стандартами РСУБД, деревья и другие отличные структуры - извращения, имеют смысл только если задача очень этого требует.

Полностью согласен

Автор: santilaas 12.3.2006, 11:38
А если ситуация такая:
есть "Филиалы", состоящие из "Отделений", они в свою делятся на "Участки".
Притом, и филиалы и отделения и участки имеют одинаковые реквизиты (ИНН, КПП и другие).

Можно это реализовать как master-detail. Но!!!
В БД есть таблица, в которой имеется внешний ключ, в качестве которого нужно выбирать владельца, т.е. первичный ключ филиала, отделения или участка. А это, как мне кажется можно реализовать только через иерархию. Или я ошибаюсь. Помогите разобраться, плз!?

Автор: Dynamic 14.3.2006, 15:14
В таких случаях, имхо, лучше одну таблицу, т.к. появляется возможность неограниченной глубины иерархии. Релизуется простым добавлением ссылки на запись верхнего уровня (родителя)

Автор: Linco 23.3.2006, 16:25
Dynamic, неограниченная глубина иерархии легко реализуется в мастер-деталь, а дерево также требует кучу накладных расходов для поддержания его в рабочем состоянии и обработки.

Ну вот одно из возможных решений: 4 таблицы Филиалы, Отделения, Участки, Реквизиты, в реквизитах допустим ввести некое поле (0,1,2) к чему относится реквизит и PID указатель на Родительскую табличку. Создать индекс уникальный по комбинации полей. Тоже конечно нетривиально, но вполне исполнимо.

Автор: Dynamic 24.3.2006, 12:11
Цитата(Linco @ 23.3.2006, 16:25 Найти цитируемый пост)
неограниченная глубина иерархии легко реализуется в мастер-деталь
Я понимаю мастер-деталь так: мастер - одна таблица, деталь - одна таблица (в простейшем случае), имеем двухступенчатую иерархию. Чтобы получить третий уровень, придется добавить подчиненную структуру к деталь, т.е. еще одну таблицу, возможно близкую по структуре. И т.д. В случае, о котором я говорил, для создания любой вложенности структуры достаточно всегда ОДНОЙ таблицы. Но это, естественно, имеет смыл при близких или идентичных по структуре данных, например, справочник статей дохода/расхода и т.п.

Автор: Oberon83 24.3.2006, 13:16
Если я правильно понял, то можно сделать следующим образом:
Одна таблица - это Название и реквизиты (филиалов, отделений и т.д.), а вторая - это тип (как раз - таки в ней и будут храниться типы структурных подразделений организации, т.е. филиал, отделение, участок). Чем не неограниченная иерархия?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)