Uploaded by Vi Meikshan

Тема5

advertisement
Реляционная модель данных
Эта модель данных реализована во многих
существующих СУБД, причем на сегодняшний
день она является наиболее распространенной.
Основные достоинства реляционного подхода:
 небольшой набор простых и точных
понятий, которые позволяют моделировать
разнообразные предметные области;
 теоретическая поддержка в виде мощного
математического аппарата теории множеств
и реляционной алгебры;
 при манипулировании данными не требуется
знать физическую организацию БД во
внешней памяти.
При формальном рассмотрении этой модели,
которая относится к низкоуровневым моделям
данных, выделяют следующие основные аспекты:
 структурная организация данных – от этого
зависит эффективность хранения данных и
скорость их обработки;
 способы обеспечения целостности данных
– для исключения противоречий между
взаимосвязанными элементами данных;
 манипулирование данными, т.е. порядок
выполнения конкретных операций при работе
СУБД.
Структурная организация данных в
реляционной модели
Основа реляционной модели – математическое
понятие отношения (англ. – relation).
Физическим представлением отношения является
обычная двумерная таблица.
В отдельной таблице обычно хранятся данные для
некоторого информационного объекта (ИО).
При таком способе структурирования данных БД
называется реляционной.
Примеры информационных объектов
Название
Реквизиты ИО
Фамилия, имя, отчество, пол,
Студент
год рождения, факультет,
курс, группа, оценки, …
Фамилия, имя, отчество, пол,
год рождения, кафедра,
Преподаватель
должность, стаж работы,
научные труды, …
Фамилия, имя, отчество, пол,
Пациент
год рождения, место работы
(учебы), должность, ….
В таблице реляционной БД столбцы называют
полями и они соответствуют реквизитам ИО,
для которого предназначена рассматриваемая
таблица.
Каждому полю обычно дают содержательное
название, причем в отдельной таблице
названия полей не должны повторяться.
Строки таблицы для хранения данных
называют записями (или кортежами).
В полях отдельной записи хранятся значения
реквизитов для конкретного экземпляра
рассматриваемого ИО.
Пример таблицы для хранения данных
Поле1
Поле2
Фамилия
Имя
Иванов Василий
Петрова
Ольга
....
....
....
....
ПолеN
Возраст
21
19
Заголовок
таблицы
Запись1
Запись2
При формировании заголовка таблицы порядок
расположения столбцов значения не имеет.
Количество столбцов определяет степень
отношения (таблицы).
Унарное отношение имеет степень 1, а бинарное
отношение – степень 2.
Кардинальность отношения измеряется
количеством записей (кортежей).
Фундаментальные (базовые)
свойства отношения (таблицы)
1. Каждая ячейка отношения содержит только одно
элементарное (атомарное, неделимое) значение.
2. Каждая запись является уникальной, т.е.
дублирование записей не допускается.
Это следует из определения таблицы как
множества записей, а каждое множество по
определению состоит из различных элементов.
3. Порядок размещения записей не имеет никакого
значения, что также вытекает из понятия
«множество».
При необходимости записи можно упорядочить с
помощью операции сортировки, но это уже
относится к манипулированию данными.
Целостность данных
в реляционной модели
Эти требования, гарантирующие корректность
данных, включают в себя два условия:
 целостность таблиц (отношений);
 целостность по ссылкам (ссылочная
целостность).
Требование целостности таблицы состоит в
том, что любая запись в рассматриваемой
таблице должна быть отличимой от любой
другой записи.
Минимальный набор атрибутов, позволяющий
однозначно идентифицировать каждую запись
рассматриваемого отношения, называется
потенциальным ключом.
Ключ называют простым, если он состоит из
одного атрибута (поля).
Например, по номеру налогоплательщика (ИНН)
можно однозначно определить его адрес,
фамилию и другие персональные данные.
Ключ называется составным, если он
образован из нескольких атрибутов.
Отношение всегда имеет хотя бы один ключ, т.к. в
крайнем случае для этой роли можно
использовать все множество атрибутов.
Тот потенциальный ключ, который выбран для
однозначной идентификации записей таблицы,
называют первичным ключом (Primary Key — PK).
В составе первичного ключа ни один атрибут не
может содержать пустых значений (NULL).
Остальные потенциальные ключи становятся
альтернативными ключами (Alternate Key — AK).
Для первичного ключа лучше всего подходит
простой ключ типа «целое число».
Целостность по ссылкам
Требование ссылочной целостности
обусловлено тем, что очень часто данные для
взаимосвязанных информационных объектов
(ИО) хранятся в разных таблицах.
Преподаватели
(РК) Код_преп
Фамилия
Имя
Отчество
Должность
(FК) Кафедра
Кафедры
Код_кафедры
Название
Телефон
Комната
(РК)
Рассматриваемые таблицы полностью
определяют ИО «Кафедра», включая перечень
преподавателей по каждой кафедре.
В данном случае необходимо, чтобы каждая запись
из таблицы «Преподаватели» ссылалась на
конкретную запись в таблице «Кафедры».
Ссылки должны идти на первичный ключ таблицы
«Кафедры», т.к. именно этот атрибут однозначно
идентифицирует конкретную кафедру.
При этом в таблице «Преподаватели» атрибут
«Кафедра», содержащий адреса ссылок, выполняет
роль внешнего ключа (Foreign Key — FK).
В данной ситуации говорят, что две таблицы
связаны по ссылкам.
Одной записи из таблицы «Кафедры» обычно
соответствует несколько записей в таблице
«Преподаватели», поэтому первую таблицу
называют главной, а вторую – подчиненной.
Требование целостности по ссылкам заключается
в следующем:
для каждого значения FK в подчиненной таблице
должна существовать запись с таким же значением
РК в главной таблице.
Если это требование не выполняется, то появляются
«висячие» (или «дохлые») ссылки.
Автоматическая поддержка целостности по
ссылкам
Ситуации, при которых
возможно нарушение
целостности связей
1. Обновление
подчиненной таблицы, т.е.
вставка новых записей
или изменение значений
внешнего ключа (FK) для
существующих записей
Действия СУБД
Следить, чтобы не
появлялись
некорректные
значения внешнего
ключа (FK) и
сообщать о таких
ситуациях
Автоматическая поддержка целостности по
ссылкам (продолжение)
Ситуации, при которых
возможно нарушение
целостности связей
Действия СУБД
2. Изменение значений Автоматическое
первичного ключа (РК) обновление значений
в главной таблице
внешнего ключа (FK) в
связанных записях
подчиненных таблиц
(каскадное обновление)
3. Из главной
таблицы
требуется
удалить запись, с
которой связаны
подчиненные
записи
Возможны три подхода:
а) запретить такую операцию, т.е.
предварительно нужно удалить
подчиненные записи либо
соответствующим образом
изменить значения FK для этих
записей
б) во всех подчиненных записях,
которые ссылаются на удаляемую
запись, присвоить
неопределенное значение
внешнему ключу (FK)
в) одновременно с удалением
записи из главной таблицы
удалить все подчиненные записи,
которые ссылаются на
удаляемую запись (каскадное
удаление)
Установка режимов поддержки целостности
связей в СУБД MS Access
Реляционная алгебра и реляционное
исчисление
Реляционная алгебра (РА) и реляционное исчисление
(РИ) – это инструменты для манипулирования
табличными данными в реляционных БД.
В частности, любой запрос к БД можно записать в виде
некоторой формулы РА или некоторого выражения
(предиката) РИ.
Средства РА и РИ эквивалентны между собой, однако
отличаются уровнем (степенью) процедурности.
РА – это теоретический язык операций, которые
позволяют получить на основе одной или
нескольких таблиц другую таблицу.
Можно конструировать вложенные формулы,
причем для любой глубины вложенности
результатом всегда является таблица (свойство
замкнутости на таблицы).
Формулы РА, состоящие из отдельных операндов и
операций, имеют четко выраженную
процедурность, т.к. результат запроса, который
записан в виде формулы РА, вычисляется при
поочередном выполнении элементарных
операций.
В отличие от этого, выражение РИ только
формулирует условия, которым должен
удовлетворять результат запроса.
Поэтому средства РИ являются
непроцедурными или декларативными
(описательными), т.к. они всего лишь
описывают свойства желаемого результата.
В совокупности РА и РИ составляют формальную
основу реальных языков DML (Data Manipulation
Language) для существующих СУБД.
К примеру, язык SQL с точки зрения пользователя
является непроцедурным языком, т.к. при
записи запроса на этом языке в первую очередь
указываются источники данных и условия,
которым должен удовлетворять требуемый
результат.
С другой стороны, при выполнении запроса на
уровне СУБД реализуется некоторая процедура с
использованием операций РА.
Операции реляционной алгебры
Любая таблица (отношение) – это множество записей, а
отдельная запись – это множество значений атрибутов.
Следовательно, традиционные операции, которые
применяются в теории множеств, пригодны для
манипулирования табличными данными в реляционных
БД.
Дополнением к этому являются специальные операции,
которые нужны для работы с базами данных.
Теоретикомножественные
операции
1. Объединение таблиц
2. Разность таблиц
3. Пересечение таблиц
4. Декартово
произведение таблиц
Специальные
реляционные операции
1. Выборка из таблицы
(селекция)
2. Проекция таблицы
3. Соединение таблиц
4. Деление таблиц
Этот набор операций РА был предложен
Коддом (Codd E.F.) в 1972 г.
Среди перечисленных восьми операций
основными являются следующие пять:
 выборка (selection);
 проекция (projection);
 декартово произведение (Cartesian product);
 объединение таблиц (union);
 разность таблиц (difference).
Остальные операции – дополнительные:
 соединение (join);
 пересечение (intersection);
 деление (division).
Каждую из дополнительных операций можно
выразить в терминах пяти основных.
Объединение таблиц: R=XY
Результатом этой бинарной операции является таблица
R, в которой каждая запись принадлежит либо таблице
Х, либо таблице Y.
Таблицы Х и Y должны быть совместимыми:
 одинаковое число атрибутов;
 соответствующие атрибуты имеют одинаковый
домен.
ID
123
Х=
124
125
ID
ФИО
122
Иванов
124
Y=
Петров
125
Смирнов
126
ФИО
Васин
Петров
Смирнов
Усов
ID
122
R= 123
124
125
126
ФИО
Васин
Иванов
Петров
Смирнов
Усов
Разность таблиц: R=X–Y
Результатом этой бинарной операции является
таблица R, в которой каждая запись принадлежит
таблице Х, но не принадлежит таблице Y.
Таблицы Х и Y должны быть совместимыми.
ID
222
223
Х=
224
226
228
ФИО
Иванов
Сидоров
Пушкин
Цветков
Козлов
ID
226
Y= 228
225
227
ФИО
Цветков
Козлов
Петров
Мухин
ID
ФИО
222 Иванов
R= 223 Сидоров
224 Пушкин
Пересечение таблиц: R = XY
Результатом этой бинарной операции является
таблица R, в которой каждая запись принадлежит
как таблице Х, так и таблице Y.
ID
122
123
Х=
124
125
126
ФИО
Васин
Иванов
Петров
Смирнов
Усов
ID
121
Y= 124
125
127
ФИО
Акимов
Петров
Смирнов
Федоров
ID
ФИО
R= 124 Петров
125 Смирнов
Выражение (X–Y) дает записи из Х, которых нет в
Y. Тогда из тождества XY=X–(X–Y) вытекает, что
операция пересечения является производной от
операции разности.
Декартово произведение: R=XY
Результатом этой бинарной операции является
таблица R, в которой все записи получены как
неповторяющиеся сцепления одной записи из
таблицы Х и одной записи из таблицы Y.
Ограничений на структуру таблиц Х и Y нет.
A B
Х= 1 2
3 2
C
3
2
D E
Y= 8 9
10 11
12 13
A B C D E
1 2 3 8 9
1 2 3 10 11
R= 1 2 3 12 13
3 2 2 8 9
3 2 2 10 11
3 2 2 12 13
Проекция таблицы: R=<список>(X)
Эта унарная операция получает
результирующую таблицу R путем удаления из
таблицы Х всех атрибутов, которые не входят в
заданный список.
Повторяющиеся записи исключаются.
ID ФИО Пол Группа
123 Иванов
ФИО
Группа
Иванов
С-86
Петрова
С-87
378 Смирнов
С-87 R=ФИО, Группа(Х)=
муж С-87
Смирнов
С-87
272 Усова
жен
Усова
С-86
муж С-86
Х= 245 Петрова жен
С-86
Выборка из таблицы: R=<условие>(X)
Эта унарная операция включает в
результирующую таблицу R только те
записи из таблицы Х, которые
удовлетворяют заданному условию.
ID
123
Х= 245
378
272
ФИО
Иванов
Петрова
Смирнов
Усова
Пол
муж
ID
ФИО Пол
жен R=Пол=муж(Х)= 123 Иванов муж
муж
378 Смирнов муж
жен
Операция соединения (join)
При этой операции соединяются записи,
которые хранятся в разных таблицах и
характеризуются определенными логическими
связями.
Операция соединения имеет несколько
разновидностей.
1. Естественное соединение: R=X▷◁Y
Из таблиц Х и Y связываются записи, которые
имеют равные значения в общих
(одноименных) столбцах.
В таблице R каждый из общих столбцов
остается в единственном экземпляре.
Х=
ID
ФИО
Группа
1
2
3
4
Иванов
Петрова
Смирнов
Усова
С-86
С-87
С-87
С-86
R=X▷◁Y=
ID
ФИО
2
3
4
Петрова
Смирнов
Усова
ID Оценка
Y=
2
4
3
5
4
5
3
4
Группа Оценка
С-87
С-87
С-86
4
3
5
2. -соединение: R=X ▷◁ Y
Из таблиц Х и Y связываются записи, в которых
значения для определенных столбцов
удовлетворяют заданному условию .
Условие  записывается в виде логического
выражения, в котором могут присутствовать
следующие операторы сравнения: =, <>, <, >, <=, >=.
X ▷◁ Y = (X  Y)
Если в выражении  используется только условие
равенства (=), то -соединение называют
эквисоединением.
3. Внешнее соединение (outer join)
Для этой операции существует несколько
разновидностей.
Левое внешнее соединение: R=X ◁Y
Выполняется как естественное соединение, но в
таблицу R попадают даже те записи из таблицы
Х, для которых не подходит ни одна из записей
в таблице Y.
Следовательно, в таблицу R включаются
абсолютно все данные из таблицы Х.
Х=
ID
ФИО
Группа
1
2
3
4
Иванов
Петрова
Смирнов
Усова
С-86
С-87
С-87
С-86
ID
R=X◁Y=
1
2
3
4
ФИО
Иванов
Петрова
Смирнов
Усова
ID Оценка
Y=
2
4
3
5
4
5
3
4
Группа
Оценка
С-86
С-87
С-87
С-86
NULL
4
3
5
Правое внешнее соединение: R=X▷ Y
Выполняется как естественное соединение, но в
таблицу R попадают даже те записи из таблицы Y,
для которых не подходит ни одна из записей в
таблице Х.
Следовательно, в таблицу R включаются
абсолютно все данные из таблицы Y.
Полное внешнее соединение: R=X  Y
Формируется как объединение результатов левого
и правого внешних соединений для таблиц Х и Y:
X  Y = (X ◁Y)  (X▷ Y)
Х=
ID
ФИО
Группа
1
2
3
4
Иванов
Петрова
Смирнов
Усова
С-86
С-87
С-87
С-86
ID
R=X▷Y=
2
4
3
5
ФИО
Петрова
Усова
Смирнов
NULL
ID Оценка
Y=
2
4
3
5
4
5
3
4
Группа
Оценка
С-87
С-86
С-87
NULL
4
5
3
4
Х=
ID
ФИО
Группа
1
2
3
4
Иванов
Петрова
Смирнов
Усова
С-86
С-87
С-87
С-86
ID
R=XY=
1
2
3
4
5
ID Оценка
Y=
2
4
3
5
4
5
3
4
ФИО
Группа
Оценка
Иванов
Петрова
Смирнов
Усова
NULL
С-86
С-87
С-87
С-86
NULL
NULL
4
5
3
4
Примеры запросов в виде формул РА
Рассмотрим БД со следующей структурой:
Запрос 1: вывести список клиентов, которые
покупали товар с кодом 2518
Вариант 1
A := CUSTOMERS▷◁ SALES
R := CUST_NAME( PROD_ID=2518(A) )
Вариант 2
A := PROD_ID=2518(SALES)
R := CUST_NAME(CUSTOMERS▷◁ A)
Для варианта 2 кардинальность таблицы А
значительно меньше, чем у таблицы SALES.
Следовательно, в этом случае операция соединения
выполняется существенно быстрее.
Запрос 2: вывести список клиентов, которые
покупали товар ХХХХХ
A := PROD_NAME=“XXXXX”(PRODUCTS)
B := SALES ▷◁ A
R := CUST_NAME(CUSTOMERS▷◁ B )
Download