Слайд 1Базы данных
Целостность реляционной модели данных
Слайд 2Определения
Целостность – соответствие информационной модели предметной области, хранимой в базе
данных, объектам реального мира и взаимосвязям в каждый момент времени.
Слайд 3Аспекты целостности
Три аспекта целостности:
Структурная целостность (обеспечивается реляционной моделью данных):
- Наличие
первичного ключа
- Отсутствие дубликатов кортежей
- Отсутствие зависимости от порядка кортежей
Ссылочная
целостность (обеспечивается СУБД) – выполняется одно из двух правил:
1) При удалении кортежа из родительского отношения, удаляются все связанные с ним кортежи подчиненного отношения (каскадное удаление)
2) При удалении кортежа из родительского отношения, на место ключа в связанных кортежах подчиненного отношения ставится значение NULL.
Семантическая целостность (обеспечивается разработчиком и соответствующими средствами СУБД):
Автоматическое выполнение условий (бизнес-правил), определенных в предметной области.
Например: возраст читателя не менее 17 лет, читатель не может брать более 5 книг, у читателя должен быть или домашний, или служебный телефон, и т.д.
Слайд 4Пути поддержания целостности БД
Два пути поддержания целостности БД:
Декларативный путь –
задаются правила в виде ограничений для данных
Процедурный путь – программная
(алгоритмическая) реализация правил, т.е. описание действий, выполняемых при изменении базы данных (триггеры и транзакции)
Слайд 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 <логическое выражение>}
Слайд 6Декларативная реализация целостности
::= [ CONSTRAINT ]
{ [ { PRIMARY KEY | UNIQUE } {
( <столбец>[ ,...n ] ) } ] |
FOREIGN KEY ( <столбец>[ ,...n ] )
REFERENCES <родительская таблица>[ ( <столбец ссылки>[ ,...n ] ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ] |
CHECK (<логическое выражение>)}
Слайд 7Декларативная реализация целостности
Концептуальная схема базы данных «Библиотека»
Publications =
author, public_year, pages>
(ISBN – уникальный код издания, название, автор,
год издания, количество страниц)
Readers =
(номер читательского билета, фамилия читателя, имя, отчество, номер служебного телефона, номер домашнего телефона)
Exemplars =
(инвентарный номер – естественный первичный ключ, ISBN издания, номер читательского билета, дата выдачи)
Слайд 8Декларативная реализация целостности
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)
);
Слайд 9Декларативная реализация целостности
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
)
Слайд 10Декларативная реализация целостности
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)