В предыдущих главах указывалось, что реляционная база данныхпредставляет собой множество таблиц, соединенных связями «один к одному», «один ко многим», «многие ко многим». Связь «один ко многим» означает, что одна запись в первой таблице может быть связана с несколькими записями другой таблицы, аналогично другие связи. Рассмотрим реляционную модель подробнее.
Приведем основные понятия реляционных баз данных без математических определений:
Тип данных – совпадает с определением типа данных в языках программирования.
Домен– тип данных с дополнительными ограничениями, например, телефон – число в определенном формате.
Отношение– фактически, это таблица.
Атрибут– название колонки таблицы.
Кортеж– фактически, это строка таблицы.
Первичный ключ– множество атрибутов (или один атрибут), который однозначно идентифицирует кортеж в отношении. Например, номера в табличках примера на Рис. 3.
Внешний ключ– атрибут, который принимает значения первичного ключа в другой таблице. Например, N_Продавца в таблице «Сделки» на Рис. 3.
Большинство реляционных СУБД не поддерживают связь «многие ко многим». Ее легко реализовать, введя промежуточную таблицу, которая будет связана с исходными таблицами двумя связями «один ко многим».
Свойства отношений:
Отсутствие кортежей-дубликатов.
Отсутствие упорядоченности кортежей (не важно, в каком порядке располагаются записи, их упорядочивание зависит от запроса или представления).
Отсутствие упорядоченности атрибутов (не важно, в каком порядке находятся колонки, вывод на экран будет определяться запросом).
Атомарность значений атрибутов (не может быть составных атрибутов). Например, Фамилия, Имя, Отчество – это три атрибута, а не один. Данное свойство – действительно жесткое правило, которое может вызывать проблемы. Например, в условиях глобальной корпорации человека могут звать по системе, отличной от «Фамилии, имени и отчества». В ОРБД и ООБД проблема решается созданием класса «Полное имя».
Реляционные СУБД обеспечивают следующие виды целостности:
Целостность сущностей: каждый кортеж должен обладать первичным ключом
Ссылочная целостность: для каждого кортежа с внешним ключом должен существовать кортеж с соответствующим первичным ключом по связи.
Пример: нет человека без фамилии, нет сделки без покупателя.
Целостность обеспечивается триггерами. Могут работать следующие механизмы:
Запретить удаление или изменение кортежей, на которые есть ссылки
При удалении установить значение в кортежах, где есть ссылки, на неопределенное
Каскадное удаление.
Каскадное обновление.
Пример: При удалении продавца установить поле «номер продавца» в таблице «сделка» на номкр «уволенного продавца» (это представляется более верным, так как таблица «Сделки» хранит финансовую информацию, которую удалять нежелательно при каскадном удалении).