Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > 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 |
ИМХО Мастер-деталь классический способ представления данных предусмотренный стандартами РСУБД, деревья и другие отличные структуры - извращения, имеют смысл только если задача очень этого требует. |
Автор: 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 |
Я понимаю мастер-деталь так: мастер - одна таблица, деталь - одна таблица (в простейшем случае), имеем двухступенчатую иерархию. Чтобы получить третий уровень, придется добавить подчиненную структуру к деталь, т.е. еще одну таблицу, возможно близкую по структуре. И т.д. В случае, о котором я говорил, для создания любой вложенности структуры достаточно всегда ОДНОЙ таблицы. Но это, естественно, имеет смыл при близких или идентичных по структуре данных, например, справочник статей дохода/расхода и т.п. |
Автор: Oberon83 24.3.2006, 13:16 |
Если я правильно понял, то можно сделать следующим образом: Одна таблица - это Название и реквизиты (филиалов, отделений и т.д.), а вторая - это тип (как раз - таки в ней и будут храниться типы структурных подразделений организации, т.е. филиал, отделение, участок). Чем не неограниченная иерархия? |