powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как лучше разбить таблицы
9 сообщений из 9, страница 1 из 1
Как лучше разбить таблицы
    #37867905
Van4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть 3 таблицы, которые связаны между собой. Таблица "Storage"(Дело) связана отношением один ко многим (1:М) с таблицей "Workcontract"(Договор), т.е. в деле хранится несколько договоров. Еще есть таблица "Protocol"(Протоколы), которая тоже связана с таблицей "Договор" и в ней может храниться несколько договоров. В свою очередь, в Деле хранятся протоколы.
P.S. Рисунок прилагается.
Как лучше разбить таблицы, чтобы не было аномалий ?
...
Рейтинг: 0 / 0
Как лучше разбить таблицы
    #37867987
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется одному, что все стрелки надо развернуть на рисунке?
По теме: Таблица договоров имеет поле-ссылку на протоколы, таблица протоколы имеет поле-ссылку на дело
либо убрать из таблицы договоров поле-ссылку на дело, либо в триггере проверять корректность данных:
Договор.Протокол.Дело = Договор.Дело
...
Рейтинг: 0 / 0
Как лучше разбить таблицы
    #37868011
Van4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При заполнении таблицы Протоколы поле "Дело" может принимать пустые значения(сначала заполняется несколько протоколов, а потом для них создается конкретное дело). А поле-ссылка на дело нужна, так как договора хранятся в деле, если ее удалить, тогда пропадает связь между таблицами дело и договор. Проблема заключается в добавлени данных в таблицу Договор, потому что договор относится и к Делу и к Протоколу, в это же время Протоколы хранятся в деле.
...
Рейтинг: 0 / 0
Как лучше разбить таблицы
    #37869180
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Van4ikПроблема заключается в добавлени данных в таблицу Договор, потому что договор относится и к Делу и к Протоколу, в это же время Протоколы хранятся в деле.
В рамках учебного задания эту проблему можно просто и красиво решить использованием составных ключей. Сделайте у таблицы "протокол" альтернативный ключ "ид_протокола, ид_дела" и цепляйте договора к протоколам именно по этому ключу.
...
Рейтинг: 0 / 0
Как лучше разбить таблицы
    #37869349
Van4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerВ рамках учебного задания эту проблему можно просто и красиво решить использованием составных ключей. Сделайте у таблицы "протокол" альтернативный ключ "ид_протокола, ид_дела" и цепляйте договора к протоколам именно по этому ключу.
Да, это хорошо, но при заполнении таблицы Протоколы "ид_дела" может принимать пустое значение, тогда возникнет исключение.
...
Рейтинг: 0 / 0
Как лучше разбить таблицы
    #37869351
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Van4ikДа, это хорошо, но при заполнении таблицы Протоколы "ид_дела" может принимать пустое значение, тогда возникнет исключение.
С чего бы это?
...
Рейтинг: 0 / 0
Как лучше разбить таблицы
    #37869362
Van4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извините, туплю......
А вообще правильно ли будет, что в таблице "Договор" будет два потенциальных ключа??
...
Рейтинг: 0 / 0
Как лучше разбить таблицы
    #37870164
ksv55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Van4ikЕсть 3 таблицы, которые связаны между собой. Таблица "Storage"(Дело) связана отношением один ко многим (1:М) с таблицей "Workcontract"(Договор), т.е. в деле хранится несколько договоров. Еще есть таблица "Protocol"(Протоколы), которая тоже связана с таблицей "Договор" и в ней может храниться несколько договоров. В свою очередь, в Деле хранятся протоколы.
При заполнении таблицы Протоколы поле "Дело" может принимать пустые значения(сначала заполняется несколько протоколов, а потом для них создается конкретное дело). А поле-ссылка на дело нужна, так как договора хранятся в деле, если ее удалить, тогда пропадает связь между таблицами дело и договор. Проблема заключается в добавлени данных в таблицу Договор, потому что договор относится и к Делу и к Протоколу, в это же время Протоколы хранятся в деле.
Создаем таблицы:
Дело (PK - ИД_Дела, ... прочая информация)
Документ (PK - ИД_Документа, ... прочая информация)
Документы_Дела (PK - ИД_Дела+ИД_Документа, ... прочая информация) связи на Дело и Документ
Договор (PK - ИД_Документа, ... прочая информация) связь на документ
Протокол (PK - ИД_Документа, ... прочая информация) связь на документ
Протоколы_Договора (PK - ИД_Протокола+ИД_Договора, ... прочая информация) связи на Договор и Протокол

Удобно, но не обязательно, в таблицу Документ добавить поле вид документа, по которому различать виды документов (договор, протокол, письмо, факс и т.д.)
...
Рейтинг: 0 / 0
Как лучше разбить таблицы
    #37871155
Van4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как лучше разбить таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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