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

Содержание

Слайд 2

Определения Целостность – соответствие информационной модели предметной области, хранимой в базе

Определения

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

объектам реального мира и взаимосвязям в каждый момент времени.
Слайд 3

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

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

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

ключа - Отсутствие дубликатов кортежей - Отсутствие зависимости от порядка кортежей
Ссылочная целостность (обеспечивается СУБД) – выполняется одно из двух правил: 1) При удалении кортежа из родительского отношения, удаляются все связанные с ним кортежи подчиненного отношения (каскадное удаление) 2) При удалении кортежа из родительского отношения, на место ключа в связанных кортежах подчиненного отношения ставится значение NULL.
Семантическая целостность (обеспечивается разработчиком и соответствующими средствами СУБД): Автоматическое выполнение условий (бизнес-правил), определенных в предметной области. Например: возраст читателя не менее 17 лет, читатель не может брать более 5 книг, у читателя должен быть или домашний, или служебный телефон, и т.д.
Слайд 4

Пути поддержания целостности БД Два пути поддержания целостности БД: Декларативный путь

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

Два пути поддержания целостности БД:
Декларативный путь – задаются

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

Декларативная реализация целостности CREATE TABLE ( [,… n]) ::= | ::=

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

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

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

<ограничение таблицы> ::= [ CONSTRAINT <название ограничения> ] {

[ { PRIMARY KEY | UNIQUE } { ( <столбец>[ ,...n ] ) } ] | FOREIGN KEY ( <столбец>[ ,...n ] ) REFERENCES <родительская таблица>[ ( <столбец ссылки>[ ,...n ] ) ] [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] |
CHECK (<логическое выражение>)}
Слайд 7

Декларативная реализация целостности Концептуальная схема базы данных «Библиотека» Publications = (ISBN

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

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

public_year, pages> (ISBN – уникальный код издания, название, автор, год издания, количество страниц)
Readers = (номер читательского билета, фамилия читателя, имя, отчество, номер служебного телефона, номер домашнего телефона)
Exemplars = (инвентарный номер – естественный первичный ключ, ISBN издания, номер читательского билета, дата выдачи)
Слайд 8

Декларативная реализация целостности CREATE TABLE Publications ( isbn VARCHAR(14) NOT NULL

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

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

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

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
)