|
|
|
Как лучше разбить таблицы
|
|||
|---|---|---|---|
|
#18+
Есть 3 таблицы, которые связаны между собой. Таблица "Storage"(Дело) связана отношением один ко многим (1:М) с таблицей "Workcontract"(Договор), т.е. в деле хранится несколько договоров. Еще есть таблица "Protocol"(Протоколы), которая тоже связана с таблицей "Договор" и в ней может храниться несколько договоров. В свою очередь, в Деле хранятся протоколы. P.S. Рисунок прилагается. Как лучше разбить таблицы, чтобы не было аномалий ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2012, 16:10 |
|
||
|
Как лучше разбить таблицы
|
|||
|---|---|---|---|
|
#18+
Мне кажется одному, что все стрелки надо развернуть на рисунке? По теме: Таблица договоров имеет поле-ссылку на протоколы, таблица протоколы имеет поле-ссылку на дело либо убрать из таблицы договоров поле-ссылку на дело, либо в триггере проверять корректность данных: Договор.Протокол.Дело = Договор.Дело ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2012, 16:40 |
|
||
|
Как лучше разбить таблицы
|
|||
|---|---|---|---|
|
#18+
При заполнении таблицы Протоколы поле "Дело" может принимать пустые значения(сначала заполняется несколько протоколов, а потом для них создается конкретное дело). А поле-ссылка на дело нужна, так как договора хранятся в деле, если ее удалить, тогда пропадает связь между таблицами дело и договор. Проблема заключается в добавлени данных в таблицу Договор, потому что договор относится и к Делу и к Протоколу, в это же время Протоколы хранятся в деле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2012, 16:52 |
|
||
|
Как лучше разбить таблицы
|
|||
|---|---|---|---|
|
#18+
Van4ikПроблема заключается в добавлени данных в таблицу Договор, потому что договор относится и к Делу и к Протоколу, в это же время Протоколы хранятся в деле. В рамках учебного задания эту проблему можно просто и красиво решить использованием составных ключей. Сделайте у таблицы "протокол" альтернативный ключ "ид_протокола, ид_дела" и цепляйте договора к протоколам именно по этому ключу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2012, 13:55 |
|
||
|
Как лучше разбить таблицы
|
|||
|---|---|---|---|
|
#18+
softwarerВ рамках учебного задания эту проблему можно просто и красиво решить использованием составных ключей. Сделайте у таблицы "протокол" альтернативный ключ "ид_протокола, ид_дела" и цепляйте договора к протоколам именно по этому ключу. Да, это хорошо, но при заполнении таблицы Протоколы "ид_дела" может принимать пустое значение, тогда возникнет исключение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2012, 15:31 |
|
||
|
Как лучше разбить таблицы
|
|||
|---|---|---|---|
|
#18+
Van4ikДа, это хорошо, но при заполнении таблицы Протоколы "ид_дела" может принимать пустое значение, тогда возникнет исключение. С чего бы это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2012, 15:33 |
|
||
|
Как лучше разбить таблицы
|
|||
|---|---|---|---|
|
#18+
Извините, туплю...... А вообще правильно ли будет, что в таблице "Договор" будет два потенциальных ключа?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2012, 15:40 |
|
||
|
Как лучше разбить таблицы
|
|||
|---|---|---|---|
|
#18+
Van4ikЕсть 3 таблицы, которые связаны между собой. Таблица "Storage"(Дело) связана отношением один ко многим (1:М) с таблицей "Workcontract"(Договор), т.е. в деле хранится несколько договоров. Еще есть таблица "Protocol"(Протоколы), которая тоже связана с таблицей "Договор" и в ней может храниться несколько договоров. В свою очередь, в Деле хранятся протоколы. При заполнении таблицы Протоколы поле "Дело" может принимать пустые значения(сначала заполняется несколько протоколов, а потом для них создается конкретное дело). А поле-ссылка на дело нужна, так как договора хранятся в деле, если ее удалить, тогда пропадает связь между таблицами дело и договор. Проблема заключается в добавлени данных в таблицу Договор, потому что договор относится и к Делу и к Протоколу, в это же время Протоколы хранятся в деле. Создаем таблицы: Дело (PK - ИД_Дела, ... прочая информация) Документ (PK - ИД_Документа, ... прочая информация) Документы_Дела (PK - ИД_Дела+ИД_Документа, ... прочая информация) связи на Дело и Документ Договор (PK - ИД_Документа, ... прочая информация) связь на документ Протокол (PK - ИД_Документа, ... прочая информация) связь на документ Протоколы_Договора (PK - ИД_Протокола+ИД_Договора, ... прочая информация) связи на Договор и Протокол Удобно, но не обязательно, в таблицу Документ добавить поле вид документа, по которому различать виды документов (договор, протокол, письмо, факс и т.д.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2012, 16:45 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37869180&tid=1541618]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
132ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 394ms |

| 0 / 0 |
