Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных / 05 Целостность реляционной модели.ppt
Скачиваний:
66
Добавлен:
22.03.2015
Размер:
45.06 Кб
Скачать

Базы данных

Целостность реляционной модели данных

Определения

Целостность – соответствие информационной модели предметной области, хранимой в базе данных, объектам реального мира и взаимосвязям в каждый момент времени.

Аспекты целостности

Три аспекта целостности:

Структурная целостность (обеспечивается реляционной моделью данных):

-Наличие первичного ключа

-Отсутствие дубликатов кортежей

-Отсутствие зависимости от порядка кортежей

Ссылочная целостность (обеспечивается СУБД) – выполняется одно из двух правил:

1) При удалении кортежа из родительского отношения, удаляются все связанные с ним кортежи подчиненного отношения (каскадное удаление)

2) При удалении кортежа из родительского отношения, на место ключа в связанных кортежах подчиненного отношения ставится значение NULL.

Семантическая целостность (обеспечивается разработчиком и соответствующими средствами СУБД):

Автоматическое выполнение условий (бизнес-правил), определенных в предметной области.

Например: возраст читателя не менее 17 лет, читатель не может брать более 5 книг, у читателя должен быть или домашний, или служебный телефон, и т.д.

Пути поддержания целостности БД

Два пути поддержания целостности БД:

Декларативный путь – задаются правила в виде ограничений для данных

Процедурный путь – программная (алгоритмическая) реализация правил, т.е. описание действий, выполняемых при изменении базы данных (триггеры и транзакции)

Декларативная реализация целостности

CREATE TABLE <имя таблицы> (<описание элемента таблицы> [,… n])

<описание элемента таблицы> ::= <определение столбца> | <ограничение таблицы>

<определение столбца> ::= <имя столбца> <тип данных> [<значение по умолчанию>] [<ограничения столбца>] <значение по умолчанию> ::= [DEFAULT <выражение>] |

[IDENTITY (<нач.значение>, <приращение>)]

<ограничение столбца> ::= [CONSTRAINT <имя ограничения>] { [NULL | NOT NULL] [

{PRIMARY KEY | UNIQUE} |

[ [FOREIGN KEY] REFERENCES <имя таблицы> (<имя столбца>) ] [ON DELETE {CASCADE | NO ACTION}]

[ON UPDATE {CASCADE | NO ACTION}] ] |

CHECK <логическое выражение>}

Декларативная реализация целостности

<ограничение таблицы> ::= [ CONSTRAINT <название ограничения> ] { [ { PRIMARY KEY | UNIQUE } { ( <столбец>[ ,...n ] ) } ] |

FOREIGN KEY ( <столбец>[ ,...n ] )

REFERENCES <родительская таблица>[ ( <столбец ссылки>[ ,...n ] ) ] [ ON DELETE { CASCADE | NO ACTION } ]

[ ON UPDATE { CASCADE | NO ACTION } ] | CHECK (<логическое выражение>)}

Декларативная реализация целостности

Концептуальная схема базы данных «Библиотека»

Publications = <isbn, title, author, public_year, pages> (ISBN – уникальный код издания, название, автор, год издания, количество страниц)

Readers = <reader_id, last_name, first_name, second_name, work_phone, home_phone>

(номер читательского билета, фамилия читателя, имя, отчество, номер служебного телефона, номер домашнего телефона)

Exemplars = <inv, isbn, reader_id, date_out> (инвентарный номер – естественный первичный ключ, ISBN издания, номер читательского билета, дата выдачи)

Декларативная реализация целостности

CREATE TABLE Publications

(

isbn VARCHAR(14) NOT NULL PRIMARY KEY, title VARCHAR(120) NOT NULL,

author VARCHAR(30) NULL,

public_year INT DEFAULT YEAR(GETDATE()) CHECK(public_year >= YEAR(GETDATE()) -100 AND public_year <= YEAR(GETDATE())),

pages INT CHECK(pages >= 5 AND pages <= 2000) );

Декларативная реализация целостности

CREATE TABLE Exemplars

(

inv VARCHAR(10) NOT NULL PRIMARY KEY,

isbn VARCHAR(14) NOT NULL

FOREIGN KEY REFERENCES Publications(isbn),

reader_id INT NULL, /* нужна ссылка на Readers, но еще нет такой таблицы*/

date_out DATETIME

)

Декларативная реализация целостности

CREATE TABLE Readers

(

reader_id INT NOT NULL PRIMARY KEY IDENTITY,

last_name VARCHAR(50) NOT NULL, first_name VARCHAR(50) NOT NULL, second_name VARCHAR(50) NULL, work_phone CHAR(11),

home_phone CHAR(11),

CONSTRAINT CK_phone CHECK(work_phone IS NOT NULL OR home_phone IS NOT NULL)

)

/* Установление ссылки */

ALTER TABLE dbo.Exemplars

ADD CONSTRAINT FK_Exemplars_Readers

FOREIGN KEY (reader_id) REFERENCES Readers(reader_id)