Целостность данных

Содержание

Слайд 2

Saturday, September 02, 2023 СОДЕРЖАНИЕ Понятие про ограничения целостности и их

Saturday, September 02, 2023

СОДЕРЖАНИЕ

Понятие про ограничения целостности и их классификация
Декларативные ограничения

целостности
Динамические ограничения целостности
Семантические ограничения целостности
Транзакции как механизм поддержания целостности
Триггеры как механизм поддержания целостности
Слайд 3

Saturday, September 02, 2023 Понятие про ограничения целостности Целостность данных –

Saturday, September 02, 2023

Понятие про ограничения целостности

Целостность данных – это

полнота, достоверность и точность данных, сохраняемых в БД.

Ограничения целостности - это правила, которые ограничивают множество возможных состояний базы данных и множество возмож- ных переходов из одного состояния в другое теми состояниями (переходами), которые рассматриваются как "допустимые".

БД находится в целостном состоянии, если он соответствует определенным для нее ограничениям целостности.

Слайд 4

Saturday, September 02, 2023 Классификация ограничений целостности По происхождению (структурные, семантические)

Saturday, September 02, 2023

Классификация ограничений целостности

По происхождению (структурные, семантические)
По способу поддержания

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

Saturday, September 02, 2023 Декларативные ограничения целостности Декларативное ограничение целостности –

Saturday, September 02, 2023

Декларативные ограничения целостности

Декларативное ограничение целостности – это ограничения,

которые фиксируют условия, которым должна удовлетворять БД.

В реляционной БД ограничения целостности задаются для таких объектов:
таблица,
столбцы,
связи между таблицами,
связи между столбцами.

Слайд 6

Saturday, September 02, 2023 Целостность таблицы В реляционных СУБД целостность таблицы

Saturday, September 02, 2023

Целостность таблицы

В реляционных СУБД целостность таблицы задается первичным

ключом, который предполагает поддержание следующих ограничений целостности:
Столбцы первичного ключа не могут содержать значений NULL.
Значение первичного ключа (как одного столбца так и совокупности столбцов) не могут дублироваться в таблице, то есть они должны быть уникальными (UNIQUE).

Синтаксис:

CONSTRAINT constraint_name PRIMARY KEY (column_list)

Пример:

CONSTRAINT DepPrk PRIMARY KEY (DepName, FacNO)

Слайд 7

Saturday, September 02, 2023 Целостность столбцов В реляционной СУБД целостность столбцов

Saturday, September 02, 2023

Целостность столбцов

В реляционной СУБД целостность столбцов представляется:
Заданием типов

данных и их размеров (обязательное свойство).
Определением, является ли обязательными значения столбца (NULL/NOT NULL).
Определением может ли значение столбца дублироваться (UNIQUE).
Определением значения по умолчанию.
Определением условия, которому должны удовлетворять значения столбца
Для производных (выводимых, вычисляемых) столбцов задается процедура их вычисления
Слайд 8

Saturday, September 02, 2023 Целостность столбцов. Типы данных CREATE TABLE TEACHER

Saturday, September 02, 2023

Целостность столбцов. Типы данных

CREATE TABLE TEACHER ( TchNO

INTEGER, Name VARCHAR(50), HireDate DATE, Salary NUMERIC (5,2));

Распространенными типами данных SQL являются:
Строка фиксированной длины (CHR(n)).
Строка переменной длины (VARCHAR(n)).
Целые числа (INTEGER, INT, BIGINT, SMALLINT)/.
Числа с фиксированной запятой (NUMERIC (p,s)).
Числа с плавающей запятой (REAL, FLOAT)
Дата (DATE) и время (TIME).

Пример:

Слайд 9

Saturday, September 02, 2023 Целостность столбцов. Обязательность значений атрибута NULL -

Saturday, September 02, 2023

Целостность столбцов. Обязательность значений атрибута

NULL - указывает, что

в столбце значения могут отсутствовать (значения по умолчанию).
NOT NULL – указывает, что значения в столбце являются обязательными.

CREATE TABLE TEACHER ( TchNO INTEGER NOT NULL, Name VARCHAR(50) NOT NULL, Post VARCHAR(30) NOT NULL HireDate DATE NULL, Salary NUMERIC (5,2));

Пример:

Слайд 10

Saturday, September 02, 2023 Целостность столбцов. Уникальность значений столбца Наличие ограничения

Saturday, September 02, 2023

Целостность столбцов. Уникальность значений столбца

Наличие ограничения UNIQUE свидетельствует,

что значение столбца (совокупности столбцов) являются уникальными (то есть не повторяющимися.
Если уникальность определена на совокупности столбцов, то каждый из таких столбцов не должен быть уникальным.
Отсутствие этого ограничения допускает повторение значений столбца (столбцов)

Синтаксис:

[CONSTRAINT constraint_name] UNIQUE (column_list)

Пример:

CONSTRAINT TchUnq UNIQUE (Name, Post, HireDate)

Слайд 11

Saturday, September 02, 2023 Целостность столбцов. Значение по умолчанию Значение по

Saturday, September 02, 2023

Целостность столбцов. Значение по умолчанию

Значение по умолчанию –

это то значение, которое принимает столбец конкретной строки, если при вводе этой строки значение данного столбца отсутствует.

Синтаксис:

Column_name data_type DEFAULT default-value

Пример:

CREATE TABLE TEACHER ( TchNO INTEGER NOT NULL, Name VARCHAR(50) NOT NULL, Post VARCHAR(30) DEFAULT ’NOT DEFINED’ HireDate DATE NULL, Salary NUMERIC (5,2) DEFAULT 0);

Слайд 12

Saturday, September 02, 2023 Целостность столбцов. Условия на значения столбца С

Saturday, September 02, 2023

Целостность столбцов. Условия на значения столбца

С помощью ограничения

CHECK можно задать условие на допустимость значений столбца.

Синтаксис:

[CONSTRAINT constraint_name] CHECK (condition)

Пример:

CREATE TABLE SGROUP ( GrpNO INTEGER NOT NULL, Num CHAR(3) NOT NULL, Course CHAR(1) DEFAULT ’1’CONSTRAINT Crs_chk CHECK (Course IN (’1’,’2’,’3’,’4’,’5’)));

Слайд 13

Saturday, September 02, 2023 Целостность столбцов. Домен как тип данных Домен

Saturday, September 02, 2023

Целостность столбцов. Домен как тип данных

Домен – именованное

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

Синтаксис:

CREATE DOMAIN name [AS] data_type [DEFAULT] value [CONSTRAINT name] CHECK (condition);

Пример:

CREATE DOMAIN Fund_Domain AS NUMERIC (5,2) CHECK (VALUE BETWEEN 0 AND 10000.00); -- Определение столбцов с использованием этого домена Salary Fund_Domain Commission Fund_Domain

Слайд 14

Saturday, September 02, 2023 Целостность связей между таблицами Целостность связей между

Saturday, September 02, 2023

Целостность связей между таблицами

Целостность связей между отношениями определяется

внешним ключом, с помощью которого производится ссылка на первичный ключ или уникальный ключ другой таблицы
Внешний ключ может содержать NULL значение. Это означает, что связь с другой таблицей является факультативной .
Внешний ключ определяет ссылочное ограничение целостности, которое предполагает, с помощью внешнего ключа нельзя ссылаться на отсутствующее значение того первичного (уникального) ключа, на который делается ссылка.

Синтаксис:

CONSTRAINT constr_name FOREIGN KEY (column_list_1) REFERENCES table_name [column_list_2] [ON DELETE {RESTRICT|CASCADE|SET NULL}SET DEFAULT}] [ON UPDATE {RESTRICT|CASCADE|SET NULL}SET DEFAULT}];

Слайд 15

Saturday, September 02, 2023 Целостность связей между столбцами Пример: Количество студентов

Saturday, September 02, 2023

Целостность связей между столбцами

Пример: Количество студентов на лекции не

должно превышать количества мест в аудитории

CREATE TRIGGER Lecture_Insert_Update FOR INSERT, UPDATE ON LECTURE
WHEN (SELECT Seats FROM ROOM WHERE ROOM.RomNO = LECTURE.RomNO) <
(SELECT Quantity FROM GROUP WHERE SGROUP.GrpNO = LECTURE.GrpNO)
begin
ROLLBACK TRANSACTION
end;

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

Слайд 16

Saturday, September 02, 2023 Динамические ограничения целостности Динамические ограничения целостности –

Saturday, September 02, 2023

Динамические ограничения целостности

Динамические ограничения целостности – это ограничения,

которые устанавливают зависимость между различными частями базы данных в различные моменты времени.
Другими словами – это ограничения, связанные с переходом базы данных из одного состояние в другое.

Выделяют такие динамические ограничения:
ситуационно-ориентированные;
операционно-ориентированные.

Слайд 17

Saturday, September 02, 2023 Ситуационно-ориентированные динамические ограничения целостности Ситуационно-ориентированные ограничения задаются

Saturday, September 02, 2023

Ситуационно-ориентированные динамические ограничения целостности

Ситуационно-ориентированные ограничения задаются в виде

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

CREATE TRIGGER Person_MaritalState
FOR INSERT, UPDATE ON PERSON
WHEN (OLD.MarSt=’холост’ AND NEW.marSt IN (‘разведен’,‘вдовец’)) OR
(OLD.MarSt=‘женат’ AND NEW.marSt = ‘холост’) OR
(OLD.MarSt=‘разведен’ AND NEW.MarSt IN (‘холост’,’вдовец’)) OR
(OLD.MarSt=‘вдовец’ AND NEW.MarSt IN (‘холост’,‘разведен’))
begin
ROLLBACK TRANSACTION
end;

Слайд 18

Saturday, September 02, 2023 Операционно-ориентированные динамические ограничения целостности Операционно-ориентированые ограничения целостности

Saturday, September 02, 2023

Операционно-ориентированные динамические ограничения целостности

Операционно-ориентированые ограничения целостности задаются в

виде допустимых последовательностей операций. Допустимость операции или последовательности операций может зависеть от текущего состояния базы данных.
Слайд 19

Saturday, September 02, 2023 Пример операционно-ориентированного ограничения целостности Пример: Вставка в

Saturday, September 02, 2023

Пример операционно-ориентированного ограничения целостности

Пример: Вставка в базу данных

информации о том, что х является супругом y допустима только в том случае, если текущее семейное положение x и y не есть женат/замужем
MARRIAGE(Husb, Wife), PERSON(Name, MarSt)

CREATE TRIGGER Marriage_Insert_Check ON MARRIAGE
FOR INSERT
WHEN (MARRIAGE.Husb = PERSON.Name AND PERSON.MarSt = ‘женат’ ) OR
(MARRIAGE.Wife = PERSON.Name AND PERSON.MarSt = "married")
begin
ROLLBACK TRANSACTION
end;

Слайд 20

Saturday, September 02, 2023 Семантические (прикладные) ограничения целостности Примеры семантических ограничений:

Saturday, September 02, 2023

Семантические (прикладные) ограничения целостности

Примеры семантических ограничений:
Описанное выше правило

изменения состояния столбца "Семейное положение»
Входящее письмо считается отработанным, когда с ним ознакомлены все заинтересованные лица и по нему принято соответствующее решение
Должностные оклады имеют следующие "вилки": …
Студент может перейти на следующий курс или остаться на том же, но не на предыдущий
Одно и то же лицо не может быть заведующим двух кафедр

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

Поддерживаются фразой CONSTRAINT, триггерами, хранимыми процедурами и функциями.

Слайд 21

Saturday, September 02, 2023 Транзакции как механизм поддержания целостности Либо все

Saturday, September 02, 2023

Транзакции как механизм поддержания целостности

Либо все предложения в

транзакции выполняются успешно, либо ни одно из них не будет выполнено.
Это свойство поддерживается даже при выполнении транзакции произойдет программный или аппаратный сбой.
Транзакция преобразует базу данных из одного целостного состояния в другое, но в процессе выполнения транзакции целостность может нарушаться.
Транзакция гарантирует, что промежуточное противоречивое состояние базы данных будет невидимым для других пользователей.

Тразакция – это последовательность предложений SQL, которые рассматриваются как единое целое.