- •Определение модели данных. Представление статических и динамических свойств реального мира. Понятие базы данных
- •Базовые структурные компоненты моделей данных: домены и атрибуты; отношение сущности, схема отношения; отношение связи, характеристика связи.
- •Понятие ограничений целостности. Общая характеристика ограничений целостности. Типы ограничений целостности.
- •Модель данных сущность-связь п. Чена: информация о сущностях и связях, структура информации. Диаграмма сущность-связь.
- •Реляционная модель данных: базовые объекты, фундаментальные свойства отношений. Представление сущностей и связей.
- •Подмножество sql для определения данных: предложение create table, правила записи. Примеры.
- •Реляционная алгебра как манипуляционная часть реляционной модели данных: общая характеристика, основные элементы, теоретико-множественные и специальные операции.
- •Реляционное исчисление с переменными-кортежами: основные определения, понятие атомов, правильно построенная формула.
- •Подмножество sql для манипулирования данными: предложения insert, delete, update. Правила написания запросов: предложение select.
- •Проектирование баз данных с использованием теории нормализации: возникающие проблемы, понятие нормальной формы, 1нф, 2нф, 3нф, нфбк, 4нф.
Подмножество sql для определения данных: предложение create table, правила записи. Примеры.
Реляционная модель данных определяет два базовых требования целостности, которые поддерживаются любой РСУБД:
требование целостности сущностей,
требование целостности по ссылкам.
Объекту или сущности реального мира в реляционной БД соответствует кортеж отношения. Требование целостности сущностей состоит в следующем: любой кортеж любого отношения должен быть отличным от любого другого кортежа этого же отношения. Это требование означает, что каждое отношение должно иметь первичный ключ. Это требование выполняется автоматически, если в системе не нарушаются базовые свойства отношений.
Кроме этого, могут быть установлены и следующие ограничения:
UNIQUE – уникальность атрибутов; определяет альтернативные ключи отношения;
NOT NULL – обязательность значения; при вставке новых или модификации существующих элементов отношения значения соответствующих атрибутов должны быть заданы;
CHECK (условие) – допустимые значения атрибутов; вставляемые значения должны удовлетворять указанному условию.
Ссылочные ограничения целостности в РМД представляют собой условия, накладываемые на сосуществование кортежей в связанных отношениях. Как уже говорилось, в реляционной БД связи между отношениями представляются с помощью внешних ключей. Вернемся к примеру, в котором рассматривались отношения ОТДЕЛ и СОТРУДНИК:
ОТДЕЛ (Номер отдела, Название (АК))
СОТРУДНИК (Номер сотрудника, Имя, Год рождения, Номер отдела (FK))
Атрибут внешнего ключа Номер отдела в отношении СОТРУДНИК позволяет получить полную информацию о том конкретном отделе, в котором работает конкретный сотрудник.
Обычно отношение, в котором определяется внешний ключ, называется дочерним отношением, а отношение, на которое ссылается внешний ключ – родительским отношением. Так, в нашем примере отношение СОТРУДНИК – дочернее, а отношение ОТДЕЛ – родительское.
Требование ссылочной целостности состоит в следующем: значение атрибута внешнего ключа в любом кортеже дочернего отношения должно соответствовать значению атрибута первичного ключа в некотором кортеже родительского отношения.
При выполнении операций, связанных с модификацией отношений (операции вставки, удаления и модификации значения соответствующего ключа) необходимо следить за требованиями целостности. Рассмотрим особенности выполнения этих операций. Все операции с дочерним отношением должны удовлетворять требованиям ссылочной целостности:
при вставке нового элемента этот элемент должен иметь допустимое значение атрибутов внешнего ключа;
удаление элемента выполняется без каких-либо ограничений;
при модификации внешнего ключа некоторого элемента этот элемент должен получить допустимое значение атрибутов внешнего ключа.
Операции с родительским отношением выполняются следующим образом:
вставка нового элемента выполняется без каких-либо ограничений;
удаление элемента не должно привести к нарушению ссылочной целостности. Если в дочернем отношении существует элемент, ссылающийся на удаляемый элемент родительского отношения, как поступить с ним? Здесь возможны три подхода:
restrict – удаление элемента из родительского отношения не выполняется, если в дочернем отношении есть хотя бы один элемент, ссылающийся на удаляемый;
cascade – вместе с элементом родительского отношения удаляются все ссылающиеся на него элементы дочернего отношения;
set NULL – атрибутам внешнего ключа дочернего отношения присваивается пустое значение (каждая СУБД использует собственный способ задания пустого значения); этот подход возможен, если для атрибутов внешнего ключа дочернего отношения не установлено ограничение обязательности значения;
модификация значения первичного ключа существующего элемента также не должна привести к нарушению ссылочной целостности. Здесь также возможны те же три подхода. При этом в случае cascade одинаковые изменения происходят и с элементом родительского отношения, и с элементом дочернего.
Например, отношение ДЕТАЛЬ на SQL для СУБД MS SQL Server м.б. определено так:
create table P (
P_ID smallint identity (1, 1) constraint P_PK primary key, --1
PNAME varchar (20) not null constraint P_UQ_01 unique, --2
PRICE money not null constraint P_CH_01 check (price > 0) --3
)
1 – определено ограничение первичного ключа (ограничение PRIMARY KEY, имя ограничения – P_PK), значения которого должны устанавливаться автоматически, начиная с 1 и с шагом 1 (т.е. в первой записи будет установлено значение 1, во второй – значение 2 и т.д.)
2 – определены ограничения уникальности (имя– P_UQ_01) и обязательности значения;
3 – определено условие (имя – P_CH_01): значение атрибута должно быть больше нуля.
Отношение ПОСТАВЩИК может быть определено следующим образом:
create table S (
S_ID smallint identity(1,1) constraint S_PK primary key,
SNAME varchar(30) not null,
ADDRESS varchar(80))
Теперь определим отношение связи ПОСТАВКА:
create table SP (
S_ID smallint not null constraint SP_FK_01 references S(S_ID), --1
P_ID smallint not null constraint SP_FK_02 references P(P_ID), --1
QTY int not null constraint SP_CH_01 check(QTY > 0),
constraint SP_PK primary key(S_ID, P_ID) --2
)
1 – определяется внешний ключ; в ограничении внешнего ключа (ключевое слово REFERENCES) указывается родительская таблица и ее первичный ключ; по умолчанию правило удаления определяется как restrict.
2 – определяется ограничение первичного ключа; так как в данном примере первичный ключ составной, определение первичного ключа дается как ограничение уровня таблицы (ограничение внешнего ключа в данном примере, устанавливаемое только для одного атрибута, является ограничением уровня атрибута).
