![]() |
Модераторы: Akella |
![]() ![]() ![]() |
|
santilaas |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 322 Регистрация: 28.8.2005 Где: Блага Репутация: нет Всего: нет |
СУБД - Firebird, Язык - Delphi6
Имеется несколько связанных таблиц, скажем "Организации", "Филиалы", "Отделы". Вопрос: при создании БД лучше создать одну таблицу (по иерархическому принципу) или связать эти 3 таблицы по принципу master-detail??? Какой подход лучше в плане быстродействия и с т.з. лёгкости создания приложения -------------------- [ |
|||
|
||||
Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 7 Всего: 162 |
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
santilaas |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 322 Регистрация: 28.8.2005 Где: Блага Репутация: нет Всего: нет |
Alex, а вообще если, одни и те же таблицы можно связать по иерархическому принципу и через master-detail, то с точки зрения рациональности и эффективности какой вариант лучше? Просто я всегда работал с master-detail, а может за иерархией (для некоторых случаев) стоит быстродействие.
-------------------- [ |
|||
|
||||
Linco |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 14.2.2006 Репутация: нет Всего: нет |
ИМХО Мастер-деталь классический способ представления данных предусмотренный стандартами РСУБД, деревья и другие отличные структуры - извращения, имеют смысл только если задача очень этого требует.
|
|||
|
||||
Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 7 Всего: 162 |
Полностью согласен -------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
santilaas |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 322 Регистрация: 28.8.2005 Где: Блага Репутация: нет Всего: нет |
А если ситуация такая:
есть "Филиалы", состоящие из "Отделений", они в свою делятся на "Участки". Притом, и филиалы и отделения и участки имеют одинаковые реквизиты (ИНН, КПП и другие). Можно это реализовать как master-detail. Но!!! В БД есть таблица, в которой имеется внешний ключ, в качестве которого нужно выбирать владельца, т.е. первичный ключ филиала, отделения или участка. А это, как мне кажется можно реализовать только через иерархию. Или я ошибаюсь. Помогите разобраться, плз!? -------------------- [ |
|||
|
||||
Dynamic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 372 Регистрация: 5.7.2004 Где: Салехард Репутация: 1 Всего: 15 |
В таких случаях, имхо, лучше одну таблицу, т.к. появляется возможность неограниченной глубины иерархии. Релизуется простым добавлением ссылки на запись верхнего уровня (родителя)
-------------------- Было бы о чем молчать, а уж что сказать – всегда найдется... |
|||
|
||||
Linco |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 14.2.2006 Репутация: нет Всего: нет |
Dynamic, неограниченная глубина иерархии легко реализуется в мастер-деталь, а дерево также требует кучу накладных расходов для поддержания его в рабочем состоянии и обработки.
Ну вот одно из возможных решений: 4 таблицы Филиалы, Отделения, Участки, Реквизиты, в реквизитах допустим ввести некое поле (0,1,2) к чему относится реквизит и PID указатель на Родительскую табличку. Создать индекс уникальный по комбинации полей. Тоже конечно нетривиально, но вполне исполнимо. |
|||
|
||||
Dynamic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 372 Регистрация: 5.7.2004 Где: Салехард Репутация: 1 Всего: 15 |
Я понимаю мастер-деталь так: мастер - одна таблица, деталь - одна таблица (в простейшем случае), имеем двухступенчатую иерархию. Чтобы получить третий уровень, придется добавить подчиненную структуру к деталь, т.е. еще одну таблицу, возможно близкую по структуре. И т.д. В случае, о котором я говорил, для создания любой вложенности структуры достаточно всегда ОДНОЙ таблицы. Но это, естественно, имеет смыл при близких или идентичных по структуре данных, например, справочник статей дохода/расхода и т.п.
-------------------- Было бы о чем молчать, а уж что сказать – всегда найдется... |
|||
|
||||
Oberon83 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 6.5.2005 Где: Республика Чуваши я Репутация: нет Всего: 1 |
Если я правильно понял, то можно сделать следующим образом:
Одна таблица - это Название и реквизиты (филиалов, отделений и т.д.), а вторая - это тип (как раз - таки в ней и будут храниться типы структурных подразделений организации, т.е. филиал, отделение, участок). Чем не неограниченная иерархия? --------------------
OpenArea.ru |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Interbase" | |
|
Обязательно указание: 1. Версию InterBase (Firebird, Yaffil) 2. Способа доступа (ADO, BDE, IBX и т.д.)
Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Firebird, Interbase | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |