Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Правильная ссылка / 20 сообщений из 20, страница 1 из 1
30.07.2008, 16:11
    #35460865
vovan_z
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная ссылка
подскажите как правильнее поступить?
у меня вот такие таблицы:
1.список филиалов
fil_id (PK)
fil_name

2. список подразделений
pod_id (PK)
pod_name

3. Список подразделений в филиалах
fil_pod_id (PK)
fil_id (FK)
pod_id (Fk)

4. Документы
doc_id (PK)
вопрос:Как правильнее в документе указать ссылку на филиалы и подразделения?
вариант 1:
DOC_id (PK)
fil_pod_id (FK)

или
вариант 2:
DOC_id (PK)
fil_id (FK)
pod_id (Fk)

и почему?
какие минусы и плюсы у этих вариантов?
спасибо
...
Рейтинг: 0 / 0
30.07.2008, 17:07
    #35461035
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная ссылка
Плюсы первого варианта - ключ (а следовательно, индекс) короче, занимает меньше места, выборка происходит быстрее.
Минусы - для того, чтобы узнать название филиала по документу, придется джойнить 3 таблицы вместо двух.
...
Рейтинг: 0 / 0
30.07.2008, 17:40
    #35461161
vovan_z
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная ссылка
Наверное плюс первого варианта еще в том что я не могу ошибочно указать связку Подразделение - Филиал.
А какой вариант всетаки правильный с точки зрения постоения БД?
...
Рейтинг: 0 / 0
30.07.2008, 17:55
    #35461219
_мод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная ссылка
vovan_zА какой вариант всетаки правильный с точки зрения постоения БД?
Все подразделения в одну иерарх. таблицу
...
Рейтинг: 0 / 0
30.07.2008, 17:59
    #35461233
vovan_z
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная ссылка
Я так предалагал но начальник грит что разные сущности и могут иметь разные атрибуты, поэтому сделал так. Как его убедить - не знаю!У меня нет аргументов!Подскажите если знаете?
...
Рейтинг: 0 / 0
30.07.2008, 18:48
    #35461373
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная ссылка
vovan_zНаверное плюс первого варианта еще в том что я не могу ошибочно указать связку Подразделение - Филиал.
А какой вариант всетаки правильный с точки зрения постоения БД?
Возможность или невозможность неправильно указать связку - это вопрос constraint'ов, а не структуры.
Если буквально следовать Вашей схеме, то правильней первый вариант - внешний ключ должен ссылаться на первичный ключ родительской таблицы, а не на произвольный набор полей.
Но если во второй вариант внести отказ от поля fil_pod_id и определение первичным ключом в таблице "Список подразделений в филиалах" сочетание (fil_id, pod_id ) - то все становится менее очевидным.
...
Рейтинг: 0 / 0
31.07.2008, 08:50
    #35461899
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная ссылка
а когда рано или поздно появятся операции между подразделениями и филиалами фиг вы их сведете - должен быть вообще единый реестр подразделений. а разные атрибуты и что? делайте широкую таблицу и в зависимости от того, что это, такие атрибуты и заполняйте.
...
Рейтинг: 0 / 0
31.07.2008, 08:51
    #35461900
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная ссылка
а если уж свербит видеть филиал в одной таблице, то заполняйте это значение триггером на основе подразделения.
...
Рейтинг: 0 / 0
31.07.2008, 09:37
    #35462000
_мод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная ссылка
vovan_zЯ так предалагал но начальник грит что разные сущности и могут иметь разные атрибуты, поэтому сделал так. Как его убедить - не знаю!У меня нет аргументов!Подскажите если знаете?
Изделие - это одна сущность. Ессно разные типы одной сущности имеют разные атрибуты, но это видно только на экране, а в БД д.б. одна таблица на одну сущность.
...
Рейтинг: 0 / 0
31.07.2008, 09:38
    #35462004
_мод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная ссылка
vovan_z
Сорри: Подразделения - одна сущность.
...
Рейтинг: 0 / 0
31.07.2008, 09:48
    #35462022
vovan_z
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная ссылка
Кот Матроскин
Возможность или невозможность неправильно указать связку - это вопрос constraint'ов, а не структуры.
Если буквально следовать Вашей схеме, то правильней первый вариант - внешний ключ должен ссылаться на первичный ключ родительской таблицы, а не на произвольный набор полей.
Но если во второй вариант внести отказ от поля fil_pod_id и определение первичным ключом в таблице "Список подразделений в филиалах" сочетание (fil_id, pod_id ) - то все становится менее очевидным.

Как я могу в варианте 2 с помощью constraint'ов заблокировать вставку подразделения которое не входит в данный филиал?
...
Рейтинг: 0 / 0
31.07.2008, 10:00
    #35462054
vovan_z
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная ссылка
_мод
Изделие - это одна сущность. Ессно разные типы одной сущности имеют разные атрибуты, но это видно только на экране, а в БД д.б. одна таблица на одну сущность.
Аргунемент начальника таков - что типа если я все свалю в одну табилцу, все атрибуты этих одинаковых (а он грит разных) сущностей то начнется каша, и будет не понятно какие поля к одному типу, а какое к другому, и пришедший после меня человек не разберется никогда. И еще получается не нормализованная схема, т.к. запись в таблице имеет поля, которые к этой записи не относятся.
В общем я так понимаю что надо выбрать подход:
1. Нормализованная схема, но неудобно с ней работать
2. Не совсем нормализованная, но зато очень удобная для работы
третьего не дано!

Я правильно понимаю?
...
Рейтинг: 0 / 0
31.07.2008, 10:17
    #35462097
думаю так
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная ссылка
vovan_z _мод
Изделие - это одна сущность. Ессно разные типы одной сущности имеют разные атрибуты, но это видно только на экране, а в БД д.б. одна таблица на одну сущность.
Аргунемент начальника таков - что типа если я все свалю в одну табилцу, все атрибуты этих одинаковых (а он грит разных) сущностей то начнется каша, и будет не понятно какие поля к одному типу, а какое к другому, и пришедший после меня человек не разберется никогда. И еще получается не нормализованная схема, т.к. запись в таблице имеет поля, которые к этой записи не относятся.
В общем я так понимаю что надо выбрать подход:
1. Нормализованная схема, но неудобно с ней работать
2. Не совсем нормализованная, но зато очень удобная для работы
третьего не дано!

Я правильно понимаю?
имхо стоит хранить все подразделения в одной таблице - таблице которая будет описывать сущность подразделения. по мне так все подразделения вне зависимости от их уровня есть сущности одного рода.
с другой стороны если по логике бизнес процессов это различные сущности то разделение таблиц оправдано. но не знаю что то причин считать их различными сущностями.
по моему любое организационное подразделение имеет одни и те же характеристики - название, уровень в ОАО, начальник, зам, сотрудники... но эти свойства имхо лучше не хранить в той же таблице, а хранить эти сущности в отдельной таблице и связывать их при помощи кросс-таблиц с таблицей подразделений. вроде бы это классический способ описания организационной структуры
...
Рейтинг: 0 / 0
31.07.2008, 10:37
    #35462147
vovan_z
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная ссылка
т.е. правильный подход таков:
Сделать древовидный справочник подразделений с полями скажем:
pod_id (PK)
pod_name
podtype_id (FK ссылка на тип подразделения)
pod_par_id (ссылка на pod_id) для оргинизации дерева

и потом сделать для каждого типа подразделения с различными атрибутами свою таблицу атрибутов.(например filial,office...)

Все так думают?
...
Рейтинг: 0 / 0
31.07.2008, 10:40
    #35462167
думаю так
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная ссылка
vovan_zт.е. правильный подход таков:
Сделать древовидный справочник подразделений с полями скажем:
pod_id (PK)
pod_name
podtype_id (FK ссылка на тип подразделения)
pod_par_id (ссылка на pod_id) для оргинизации дерева

и потом сделать для каждого типа подразделения с различными атрибутами свою таблицу атрибутов.(например filial,office...)

Все так думают?
http://www.sql.ru/forum/actualthread.aspx?tid=507182&pg=-1

тема по моему для тебя
...
Рейтинг: 0 / 0
31.07.2008, 11:17
    #35462370
vovan_z
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная ссылка
ну не совсем то что я спрашивал
...
Рейтинг: 0 / 0
31.07.2008, 11:55
    #35462561
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная ссылка
vovan_z
Как я могу в варианте 2 с помощью constraint'ов заблокировать вставку подразделения которое не входит в данный филиал?

Обьявляете в таблице "документы" Foreign key на таблицу "Список подразделений в филиалах", колонки fil_id ,pod_id.
Ваша СУБД так не умеет, что ли?
...
Рейтинг: 0 / 0
31.07.2008, 12:02
    #35462587
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная ссылка
Если все задокументировать,то все разберутся. Так что отмаза начальника голима.
...
Рейтинг: 0 / 0
31.07.2008, 12:36
    #35462754
vovan_z
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная ссылка
Кот Матроскин
Обьявляете в таблице "документы" Foreign key на таблицу "Список подразделений в филиалах", колонки fil_id ,pod_id.
Ваша СУБД так не умеет, что ли?
Да, точно. так будет работать. но все же буду использовать вариант 1. он вроде получше
...
Рейтинг: 0 / 0
31.07.2008, 12:38
    #35462773
vovan_z
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная ссылка
Всем спасибо.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Правильная ссылка / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]