|  | 
| 
Справочники, связанные с объектами | |||
|---|---|---|---|
| #18+ Привет. Есть таблица организаций и таблица учета отношения к воинской обязанности сотрудников. В последней поле - Военкомат, где сотрудник на учете. С одной стороны обычно для отчетов требуется только наименование Военкомата, но с другой могут потребоваться контакты или реквизиты, что уже сделано в таблице организаций. Вопрос собственно в выборе варианта: Вариант 1. Создать отдельную справочную таблицу Военкоматов. Вариант 2. Вести Военкоматы в общей таблице организаций. Минусы. Вариант 1. - Дублирование структур. - Если по каким-то причинам Военкомат выступит как организация в иной ипостаси, дублирование данных со всеми его прелестями. Вариант 2. - При вводе данных пользователю придется выбирать Военкомат из справочника ВСЕХ организаций, что не есть хорошо. - Выборку зарегистрированных в системе Военкоматов получить проблематично. Решение с Вариантом 2 при добавлении в структуру таблицы организаций логического поля "Военкомат" не подходит, т.к. мало ли сколько подобных признаков. (Ex. Налоговые, Пенсионные фонды, Банки и т.п.). Также не подходит поле признак из справочника, т.к. организация может относится к различным категориям одновременно. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 16.05.2003, 14:07 |  | ||
| 
Справочники, связанные с объектами | |||
|---|---|---|---|
| #18+ Если структура одинаковая, то хранить однозначно надо все в одной таблице организаций. Делаете спрачоник типов организаций, а раз уж одна организация может быть нескольких типов, то делаете промежуточную таблицу с 2 полями - Код Организации и Код типа организации и соотвествующе связываете со справочниками. Получается многие-ко-многим, все будет работать. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 16.05.2003, 14:30 |  | ||
| 
Справочники, связанные с объектами | |||
|---|---|---|---|
| #18+ Да, похоже ничего другого не изобретешь. А вот при предложенном варианте в продолжение вопроса. Поле в таблице отношения к воинской обязанности привязывать к идентификатору таблицы организаций или к идентификатору записи промежуточной таблицы связей? ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 16.05.2003, 14:38 |  | ||
| 
Справочники, связанные с объектами | |||
|---|---|---|---|
| #18+ Честно говоря не понял вопроса. Если вы о том - как узнать, что организация является воинской, то тут все элементарно - справочник типов организация можно сказать является статичным (я называю такие справочники системными) и пользователями изменяться не может. Вы спокойно можете вбить в него под жесткими кодами все существующие типы организаций и ссылатся на них в запросах. Но более удачным вариантом будет сделать вьювер, возвращающий Коды всех организаций, являющимися военными. Далее с таким вьювером будет легко манипулировать, что то типа того: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Таким же образом можно будет поделать вьювера на любые другие необходимые типы организаций и легко манипуляровать организациями. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 16.05.2003, 15:22 |  | ||
| 
Справочники, связанные с объектами | |||
|---|---|---|---|
| #18+ Поясняю вопрос Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 16.05.2003, 15:46 |  | ||
| 
Справочники, связанные с объектами | |||
|---|---|---|---|
| #18+ В таблице "Организации-Категории" поле id не нужно - idОрганизация + idКатегория и будут являться primary key. Естественно тогда останется в связях воинской обязанности только одна конструкция: Table ВоинскаяОбязанность (...idВоенкомат reference Организация(id)...) ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 16.05.2003, 16:01 |  | ||
| 
Справочники, связанные с объектами | |||
|---|---|---|---|
| #18+ Но создав искуственный (точно в термине не уверен) первичный ключ для таблицы связей и привязавшись к нему, мы не допустим удаления ни используемой категории 'Военкомат', ни самой записи об отношении организации к военкоматам. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 16.05.2003, 16:12 |  | ||
| 
Справочники, связанные с объектами | |||
|---|---|---|---|
| #18+ Почему это не удалим в таблице отношений ? Нормально удалим, так как 2 поля в этой таблице будут являться дочерними по отношению к таблицам организаций и типов организаций, а то, что они в связке образуют первичный ключ будет гарантировать нам уникальность информации и не позволит занести например дважды на одну организацию тип Военкомат. А удаления в родительских таблицах зависят только от логики и регулируются вами. Например связь Тип организации - Отношения будет правильно запрещать удаления записи в Типе организации, если на него ссылается хоть одна организация, чтобы не нарушить целостность данных организаций. А связь Организация-отношения фактически является подсвойством организации и при удалении организации все записи по этой организации в таблице отношений должны быть удалены. Это реализуется 3 путями и в основном зависит от возможностей SQL сервера - самый простой способ - указать каскадные удаления при создании связи между Организациями и Отношениями. Если каскадные операции не поддерживаются, то необходимо написать свой триггер на удаление записи в таблице Организаций, в котором нужно удалить все записи, имеющие код удаляемых организаций. Если тригерра тоже не поддерживаются, то перед удалением организации сначала придется вручную выполнять скрипт, аналогичный скрипту триггера, заключив скрипт удаления Отношений и Организаций в транзакцию, чтобы гарантировать целостность данных. Вообще, чтобы не запутаться во всех этих связях, необходимо всегда четко разделять для себя связи, которых может быть 2 вида: 1. Свойства родительского обьекта - например каждая запись в Отношениях определяет свойство организации принадлежности к типу организаций 2. Ссылки на другой обьект - например каждая запись в Отношениях ссылается на определенный тип организации в таблице Тип организаций Обычно свойства обьекта не должны ограничивать его удаление, т.е. если нам разрешено удалить организацию, то его свойства в таблицах Отношения тоже должны автоматически удалиться. Естественно бывают исключения - например когда свойства при определенных условиях уже не могут быть удалены, что может разруливаться опять же с помощью каскадных удалений и тригерров самой таблицы свойств (в нашем случае таблицы Отношений). Если удаление в подчиненной таблице по каким то причинам будет прервано, то удаление записи в таблице Организаций не состоится, и это будет правильно. Ссылки же всегда должны хранится как связи без всяких каскадных удалений. Это будет гарантировать, что в справочниках можно будет удалять только ту информацию, на которую никто не ссылается. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 16.05.2003, 17:05 |  | ||
|  | 

| start [/forum/topic.php?fid=32&fpage=181&tid=1546967]: | 0ms | 
| get settings: | 11ms | 
| get forum list: | 15ms | 
| check forum access: | 5ms | 
| check topic access: | 5ms | 
| track hit: | 35ms | 
| get topic data: | 13ms | 
| get forum data: | 3ms | 
| get page messages: | 51ms | 
| get tp. blocked users: | 2ms | 
| others: | 15ms | 
| total: | 155ms | 

| 0 / 0 | 
