|
|
|
Правильная ссылка
|
|||
|---|---|---|---|
|
#18+
подскажите как правильнее поступить? у меня вот такие таблицы: 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) и почему? какие минусы и плюсы у этих вариантов? спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2008, 16:11 |
|
||
|
Правильная ссылка
|
|||
|---|---|---|---|
|
#18+
Плюсы первого варианта - ключ (а следовательно, индекс) короче, занимает меньше места, выборка происходит быстрее. Минусы - для того, чтобы узнать название филиала по документу, придется джойнить 3 таблицы вместо двух. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2008, 17:07 |
|
||
|
Правильная ссылка
|
|||
|---|---|---|---|
|
#18+
Наверное плюс первого варианта еще в том что я не могу ошибочно указать связку Подразделение - Филиал. А какой вариант всетаки правильный с точки зрения постоения БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2008, 17:40 |
|
||
|
Правильная ссылка
|
|||
|---|---|---|---|
|
#18+
vovan_zА какой вариант всетаки правильный с точки зрения постоения БД? Все подразделения в одну иерарх. таблицу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2008, 17:55 |
|
||
|
Правильная ссылка
|
|||
|---|---|---|---|
|
#18+
Я так предалагал но начальник грит что разные сущности и могут иметь разные атрибуты, поэтому сделал так. Как его убедить - не знаю!У меня нет аргументов!Подскажите если знаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2008, 17:59 |
|
||
|
Правильная ссылка
|
|||
|---|---|---|---|
|
#18+
vovan_zНаверное плюс первого варианта еще в том что я не могу ошибочно указать связку Подразделение - Филиал. А какой вариант всетаки правильный с точки зрения постоения БД? Возможность или невозможность неправильно указать связку - это вопрос constraint'ов, а не структуры. Если буквально следовать Вашей схеме, то правильней первый вариант - внешний ключ должен ссылаться на первичный ключ родительской таблицы, а не на произвольный набор полей. Но если во второй вариант внести отказ от поля fil_pod_id и определение первичным ключом в таблице "Список подразделений в филиалах" сочетание (fil_id, pod_id ) - то все становится менее очевидным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2008, 18:48 |
|
||
|
Правильная ссылка
|
|||
|---|---|---|---|
|
#18+
а когда рано или поздно появятся операции между подразделениями и филиалами фиг вы их сведете - должен быть вообще единый реестр подразделений. а разные атрибуты и что? делайте широкую таблицу и в зависимости от того, что это, такие атрибуты и заполняйте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 08:50 |
|
||
|
Правильная ссылка
|
|||
|---|---|---|---|
|
#18+
а если уж свербит видеть филиал в одной таблице, то заполняйте это значение триггером на основе подразделения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 08:51 |
|
||
|
Правильная ссылка
|
|||
|---|---|---|---|
|
#18+
vovan_zЯ так предалагал но начальник грит что разные сущности и могут иметь разные атрибуты, поэтому сделал так. Как его убедить - не знаю!У меня нет аргументов!Подскажите если знаете? Изделие - это одна сущность. Ессно разные типы одной сущности имеют разные атрибуты, но это видно только на экране, а в БД д.б. одна таблица на одну сущность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 09:37 |
|
||
|
Правильная ссылка
|
|||
|---|---|---|---|
|
#18+
vovan_z Сорри: Подразделения - одна сущность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 09:38 |
|
||
|
Правильная ссылка
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин Возможность или невозможность неправильно указать связку - это вопрос constraint'ов, а не структуры. Если буквально следовать Вашей схеме, то правильней первый вариант - внешний ключ должен ссылаться на первичный ключ родительской таблицы, а не на произвольный набор полей. Но если во второй вариант внести отказ от поля fil_pod_id и определение первичным ключом в таблице "Список подразделений в филиалах" сочетание (fil_id, pod_id ) - то все становится менее очевидным. Как я могу в варианте 2 с помощью constraint'ов заблокировать вставку подразделения которое не входит в данный филиал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 09:48 |
|
||
|
Правильная ссылка
|
|||
|---|---|---|---|
|
#18+
_мод Изделие - это одна сущность. Ессно разные типы одной сущности имеют разные атрибуты, но это видно только на экране, а в БД д.б. одна таблица на одну сущность. Аргунемент начальника таков - что типа если я все свалю в одну табилцу, все атрибуты этих одинаковых (а он грит разных) сущностей то начнется каша, и будет не понятно какие поля к одному типу, а какое к другому, и пришедший после меня человек не разберется никогда. И еще получается не нормализованная схема, т.к. запись в таблице имеет поля, которые к этой записи не относятся. В общем я так понимаю что надо выбрать подход: 1. Нормализованная схема, но неудобно с ней работать 2. Не совсем нормализованная, но зато очень удобная для работы третьего не дано! Я правильно понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 10:00 |
|
||
|
Правильная ссылка
|
|||
|---|---|---|---|
|
#18+
vovan_z _мод Изделие - это одна сущность. Ессно разные типы одной сущности имеют разные атрибуты, но это видно только на экране, а в БД д.б. одна таблица на одну сущность. Аргунемент начальника таков - что типа если я все свалю в одну табилцу, все атрибуты этих одинаковых (а он грит разных) сущностей то начнется каша, и будет не понятно какие поля к одному типу, а какое к другому, и пришедший после меня человек не разберется никогда. И еще получается не нормализованная схема, т.к. запись в таблице имеет поля, которые к этой записи не относятся. В общем я так понимаю что надо выбрать подход: 1. Нормализованная схема, но неудобно с ней работать 2. Не совсем нормализованная, но зато очень удобная для работы третьего не дано! Я правильно понимаю? имхо стоит хранить все подразделения в одной таблице - таблице которая будет описывать сущность подразделения. по мне так все подразделения вне зависимости от их уровня есть сущности одного рода. с другой стороны если по логике бизнес процессов это различные сущности то разделение таблиц оправдано. но не знаю что то причин считать их различными сущностями. по моему любое организационное подразделение имеет одни и те же характеристики - название, уровень в ОАО, начальник, зам, сотрудники... но эти свойства имхо лучше не хранить в той же таблице, а хранить эти сущности в отдельной таблице и связывать их при помощи кросс-таблиц с таблицей подразделений. вроде бы это классический способ описания организационной структуры ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 10:17 |
|
||
|
Правильная ссылка
|
|||
|---|---|---|---|
|
#18+
т.е. правильный подход таков: Сделать древовидный справочник подразделений с полями скажем: pod_id (PK) pod_name podtype_id (FK ссылка на тип подразделения) pod_par_id (ссылка на pod_id) для оргинизации дерева и потом сделать для каждого типа подразделения с различными атрибутами свою таблицу атрибутов.(например filial,office...) Все так думают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 10:37 |
|
||
|
Правильная ссылка
|
|||
|---|---|---|---|
|
#18+
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 тема по моему для тебя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 10:40 |
|
||
|
Правильная ссылка
|
|||
|---|---|---|---|
|
#18+
ну не совсем то что я спрашивал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 11:17 |
|
||
|
Правильная ссылка
|
|||
|---|---|---|---|
|
#18+
vovan_z Как я могу в варианте 2 с помощью constraint'ов заблокировать вставку подразделения которое не входит в данный филиал? Обьявляете в таблице "документы" Foreign key на таблицу "Список подразделений в филиалах", колонки fil_id ,pod_id. Ваша СУБД так не умеет, что ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 11:55 |
|
||
|
Правильная ссылка
|
|||
|---|---|---|---|
|
#18+
Если все задокументировать,то все разберутся. Так что отмаза начальника голима. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 12:02 |
|
||
|
Правильная ссылка
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин Обьявляете в таблице "документы" Foreign key на таблицу "Список подразделений в филиалах", колонки fil_id ,pod_id. Ваша СУБД так не умеет, что ли? Да, точно. так будет работать. но все же буду использовать вариант 1. он вроде получше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2008, 12:36 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=100&tid=1543735]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 368ms |

| 0 / 0 |
