|
Программирование >> Исключение дубликатов строк
Связь многие-ко-многим всегдо разрешается использованием связывающей таблицы. В данном примере Pllot Cer+ificatlons является связывающей таблицей. Теперь отдельный летчик может иметь любое количество допусков, а отдельный допуск может быть поставлен в соответствие любому количеству летчиков.
I RLOT OEFrnRCATIONs! PilotID Certification ID CPK I CPK \ Рис. 2.17. Представление в виде диаграммы связи многие-ко-многим Связь многие-ко-многим устанавливается путем создания связывающей таблицы. Для этого берется копия первичного ключа каждой таблицы и используется для формирования структуры новой таблицы. Эти поля обычно служат двум целям: вместе они образуют составной первичный ключ связывающей таблицы; пб отдельности каждый из них служит внешним ключом. Диаграмма этой связи представлена на рис. 2.17. Для уверенности в том, что связи между таблицами в базе данных действительно надежные, необходимо для каждой связи определить характеристики. Они указывают, что произойдет при удалении записи, а также тип и степень участия таблицы в связи. Прежде чем начать обсуждение характеристик связи, необходимо уточнить один момент. Приведенные ниже характеристики представлены в пределах родового и логического фрейма связи. Эти характеристики важны, поскольку они позволяют усилить реляционную целостность. Однако способ их реализации изменяется в зависимости от программного обеспечения базы данных. Необходимо изучить документацию по программному обеспечению базы данных, чтобы определить, поддерживаются ли эти характеристики, и если да, то как их можно реализовать. Определение пропило удоленип Правило удаления определяет, что произойдет, когда пользователь выдаст запрос на удаление записи в исходной таблице со связью один-к-одному или в таблице на стороне один в связи один-ко-многим. Определение этого правила может защитить от появления зависших записей. (Под зависшими записями понимаются записи в подчиненной таблице связи один-к-одному, у которой отсутствуют связанные с ней записи в первичной таблице, или записи в таблице на стороне многие связи один-ко-многим, у которых отсутствуют связанные с ними записи в таблице на стороне один .) Можно установить два типа правил удаления для связи: ограничивающее и каскадное. Ограничивающее правило удаления не позволяет удалять указанную в запросе запись, когда в подчиненной таблице связи один-к-одному или в таблице на стороне многие связи один-ко-многим имеются зависимые записи. Необходимо удалить все зависимые записи, прежде чем удалять запись, указанную в запросе. Этот тип правила удаления используется как само собой разумеющееся. Когда действует каскадное правило удаления, можно удалять запись, указанную в запросе, и при этом будут также удалены все зависимые записи в подчиненной таблице связи один-к-одному или в таблице на стороне многие связи один-ко-многим. Пользуйтесь этим правилом очень осторожно, поскольку иначе можно ликвидировать таблииу, удалив записи, которые в действительности вы хотели сохранить! Независимо от выбранного правила удаления всегда тщательно проверяйте свои связи, чтобы определить, какой тип связи подходит. Один очень простой вопрос поможет решить, какое правило использовать. Вначале выберите пару таблиц, а затем спросите себя: Если удаляется запись в [имя первичной таблицы или на стороне один ], должны ли также удаляться зависимые записи в [имя подчиненной таблицы или на стороне многие ]? Этот вопрос поставлен в общем смысле, чтобы можно было понять предпосылки, стоящие за мим. Чтобы применить этот вопрос в действительном смысле, замените фразы, заключенные в квадратные скобки, на имена таблиц. Вопрос будет выглядеть, возможно, так: Если удаляется запись в таблице Committees, должны ли также удаляться зависимые записи в таблице Committee Members? Если ответ нет , то используйте ограничивающее правило удаления; в противном случае используйте каскадное правило. В конечном счете ответ на этот вопрос в большой мере зависит от того, как используются данные, сохраненные в базе данных. Именно поэтому следует тщательно изучить связи и убедиться, что выбрано верное правило. На рис. 2.18 показано, как изобразить на диаграмме правило удаления для этой связи. Для ограничивающего правила удаления используется обозначение (R), а для каскадного - (С). Committees ......................................... Committee ID PK Committee Members j employee Ю CPK Этот символ указывает, что зависимые записи в тоблице CommltteeMembers будут удаляться при удалении записи в таблице Committees. Рис. 2.18. Представление на диаграмме правил удаления для таблиц Committees и Сommittee Members Устоновко типо учостил При определении связи между парой таблиц ка>едая таблица участвует в ней конкретным образом. Тип участия, присвоенный указанной таблице, определяет, должна ли запись присутствовать в этой таблице до того, как можно внести запись в другую таблицу. Имеется два типа участия: Обязательный - В этой таблице должна существовать по меньшей мере одна запись, прежде чем можно будет вносить записи в другую таблицу. Необязательный - Отсутствует требование о наличии любых записей в этой таблице до внесения каких-либо записей в другую таблицу. Тип участия, выбираемый для пары таблиц, зависит главным образом от логической схемы деятельности вашей организации. Предположим, вы работаете в большой компании, состоящей из нескольких отделов. В созданной вами БД имеются таблицы Employees (Сотрудники), Departments (Отделы) и Department Employees Employees
DepartmentEmpioyees Departments
Рис. 2.19. Таблицы Employees, Departments и Department Employees
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |