Связанные отношения
Лекция 5. Связанные отношения. Принципы поддержки целостности данных
В реляционной модели данные представляются в виде совокупности взаимосвязанных таблиц. Таким образом, еще одним важным понятием реляционной модели является связь между отношениями.
В связях между отношениями используют ключи, и в зависимости от типа ключей участвующих в связях возникают различные типы связей. Основным условием связи между отношениями является совпадение доменов (или типов, если домены не используются) ключей используемых в связи. При этом ключ связи в подчиненном отношении называется внешним ключом.
Иногда внешний ключ может ссылаться на ту же таблицу, которой он принадлежит, в этом случае он будет называться рекурсивным.
Типы связей между отношениями
Различают три основных типа связей между таблицами в РМД:
· один-к-одному (1:1) – каждому кортежу одного отношения соответствует только один кортеж другого отношения (рисунок 5.1);
Рекомендуемые материалы
Рисунок 5.1 – тип связи один-к-одному
· один-ко-многим (1:М) – одному кортежу главного отношения соответствует несколько кортежей подчиненного отношения (рисунок 5.2);
Рисунок 5.2 – тип связи один-ко-многим
· многие-ко-многим (М:М) – одному кортежу одного отношения соответствует множество кортежей другого отношения и наоборот (рисунок 5.3).
Рисунок 5.3 – тип связи многие-ко-многим
Связь один-к-одному встречается на много реже связи один-ко-многим, ее используют, если не хотят чтобы основная таблица «распухала» от второстепенной информации. Кроме того, считается, что БД в состав которых входят подобные связи не могут считаться полностью нормализованными.
Тип связи один-ко-многим является самым распространенным в реляционных БД, он позволяет моделировать иерархические структуры данных.
Связь многие-ко-многим встречается достаточно часто, однако РСУБД не поддерживают этот тип связи на уровне индексов и ссылочной целостности, но позволяют реализовывать его неявно. Считается, что БД всегда можно перестроить так, чтобы любая связь многие-ко-многим, была преобразована в одну и более связи один-ко-многим (рисунок 5.4).
Рисунок 5.4 – преобразование связи многие-ко-многим
Значения промежуточной таблицы наглядно показывают, какое блюдо использует какой продукт.
Условия целостности данных
Чтобы информация, хранящаяся в БД была однозначной и непротиворечивой и сохраняла свою информативность, в реляционной модели устанавливаются некоторые ограничительные условия. Ограничительные условия – это правила, определяющие возможные значения данных. Они обеспечивающие логическую основу для поддержания корректности значений данных и позволяют свести к минимуму ошибки, возникающие при обновлении и обработке. Важнейшими ограничениями целостности данных являются:
· категорийная целостность;
· ссылочная целостность.
Ограничение категорийной целостности заключается в следующем. Кортежи отношения представляют в БД элементы определенных объектов реального мира, в соответствии с терминологией реляционных СУБД, категорий. Первичный ключ таблицы должен однозначно определять каждый кортеж и, следовательно, каждый элемент категории. Нарушение категорийной целостности возникает при попытке внести в отношение кортежи с неопределенным значением первичного ключа, т.е. можно сказать неизвестной категории. Поэтому картеж не может быть занесен в БД до тех пор, пока не будут определены все атрибуты ее первичного ключа.
Ограничения, накладываемые на внешние ключи для обеспечения целостности данных, называются ссылочной целостностью.
Другими словами, если две таблицы связаны между собой, то внешний ключ дочерней таблицы должен содержать только те значения, которые уже имеются среди значений первичного ключа родительской таблицы, в противном случае будет нарушено условие ссылочной целостности данных. Для соблюдения ссылочной целостности при вставке новых кортежей или модификации значений внешнего ключа в существующих кортежах, необходимо следить за корректностью значений внешнего ключа. Обычно СУБД следит за уникальностью значений первичного ключа и корректностью значений внешних ключей, следовательно, за котегорийной и ссылочной целостностью.
Правила сохранения ссылочной целостности могут выбираться разработчиком в зависимости от предметной области разрабатываемой БД и возможностей СУБД.
При удалении кортежей из отношения, на которые имеется ссылка, можно использовать один из трех вариантов, каждый из которых поддерживает ссылочную целостность:
· запрещать удаление кортежа, на который существует ссылка в подчиненном отношении (в этом случае для удаления кортежа главного отношения, необходимо удалить все ссылающиеся на него кортежи, либо изменить значения их внешнего ключа);
· при удалении кортежа, на который имеются ссылки, во всех ссылающихся кортежах значение внешних ключей автоматически станет неопределенным;
· (каскадное удаление) при удалении кортежа из отношения, на который имеются ссылки, в подчиненных отношениях, автоматически удаляются все ссылающиеся кортежи подчиненных таблиц.
При обновлении значений в первичном ключе кортежа главной таблицы могут использоваться подобные правила:
· запрещать изменения значений в первичном ключе, на который существуют ссылки;
· (каскадное обновление) при изменении значений в первичном ключе главной таблицы, на который имеются ссылки, автоматически произойдет обновление значений внешних ключей ссылающихся на него кортежей.
Контрольные вопросы
1. Что такое внешний ключ?
2. Каковы условия соединения ключей отношений?
3. Какие существуют типы связей?
4. Какой тип связи получится, если в качестве внешнего ключа будет выступать первичный ключ?
5. Какой тип связи установится при использовании не уникального внешнего ключа?
6. Как реализуется связь многие-ко-многим в РСУБД?
7. Что такое «ограничительные условия»?
8. Что такое «категорийная целостность»?
9. Что такое «ссылочная целостность»?
10. Какие правила позволяют сохранить ссылочную целостность при удалении?
11. Какие правила позволяют сохранить ссылочную целостность при обновлении?
12. Что произойдет, если СУБД не будет поддерживать категорийную или ссылочную целостность?
Задания для самостоятельной работы
Задание 1. Начертите таблицы «Автомобили» и «Владельцы автомобилей» и заполните их значениями. Определите, какой тип связи будет между этими отношениями, и в каком случае?
Задание 2. Некоторая строительная фирма ведет учет материалов необходимых для постройки объектов, в результате были получены две таблицы 5.1 и 5.2, определите типы связей между таблицами и предложите способ учета количества необходимых материалов для каждого объекта.
Таблица 5.1 – Строительный объект
№ Объекта | Адрес |
01 | Садовое кольцо д.115 |
02 | Пархоменко д. 69 |
03 | Пароходная д. 110 |
… | … |
Таблица 5.2 – Типы материалов
Код мат. | Наименование |
010 | Доска 50*300*2000 |
011 | Доска 45*300*2000 |
101 | Обратите внимание на лекцию "4 - Физиология мышц". Гвозди строительные 100 |
102 | Гвозди строительные 150 |
… | … |