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

Под целостностью понимают «правильность» данных, содержащихся в БД, по отношению к предметной области. Целостность данных подразделяется на следующие категории.

· Сущностная целостность

· Доменная целостность

· Ссылочная целостность

· Пользовательская целостность

Сущностная целостность

Целостность на уровне сущности означает обеспечение уникальности экземпляра сущности, т.е., строки в конкретной таблице. Она обеспечивается указанием ограничений целостности PRIMARY KEY или UNIQUE в SQL, или указанием первичного ключа таблицы.

Доменная целостность

Доменная целостность - достоверность значений атрибута, или в конкретном столбце. Она поддерживается в соответствии с указанием типа данных, формата, правил и ограничений CHECK, а также ограничения на диапазон возможных значений, задаваемого с помощью FOREIGN KEY (внешний ключ), DEFAULT (значение по умолчанию), определений NOT NULL (недопустимость значения NULL).

Ссылочная целостность

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

При обеспечении ссылочной целостности СУБД не допускает следующих действий пользователей.

· Добавления или изменения строк в связанной таблице, если в первичной таблице нет соответствующей строки.

· Изменения значений в первичной таблице, которое приводит к появлению потерянных строк в связанной таблице.

· Удаления строк из первичной таблицы, если имеются соответствующие ей строки в связанных таблицах.

Пример таблиц с нарушением ссылочной целостности:

Студент       Дисциплина
Студ_ИД Студ_Фио Студ_рейтинг СтудентДисциплина Дсц_ИД Наим
Иванов Студ_ИД Дсц_ИД Оценка ТАУ
Иванов ОБЖ
Иванова    
         

 

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

Триггером является хранимая процедура, выполняемая автоматически при возникновении события на сервере. Различают триггеры DML (срабатывающие при попытке изменения данных) и триггеры DDL (срабатывающие при попытке изменить описание данных).

DML-триггеры выполняются по событиям, вызванным попыткой пользователя изменить данные с помощью языка обработки данных. Событиями DML являются процедуры INSERT, UPDATE или DELETE, применяемые к таблице или представлению (View). Триггеры DML используют внутренние логические таблицы, именуемые deleted и inserted. По своей структуре они подобны таблице, на которой определен триггер, то есть таблице, к которой применяется действие пользователя. В таблицах deleted и inserted содержатся старые или новые значения строк, которые могут быть изменены действиями пользователя.

DML-триггеры могут обращаться к другим таблицам. DML-триггеры удобно использовать в следующих случаях:

· для каскадных изменений в связанных таблицах базы данных;

· для предотвращения случайных или неправильных операций INSERT, UPDATE и DELETE.

При редактировании связанных таблиц в зависимости от заданных ограничений поддержки целостности СУБД может:

· выполнить каскадное (CASCADE) удаление/обновление строк в связанных таблицах;

· не выполнять действий (NO ACTION) по редактированию связанных таблиц.

Основная литература

Учебник / Учебное пособие Раздел Страницы
1. Карпова Т.С. Базы данных: модели, разработка, реализация. - СПб.: Питер, 2001.- 304 с.; ил. Глава 7. 121-134
2. Хомоненко А.Д, Цыганков В.М., Мальцев М.Г. Базы данных: Учебник для высших учебных заведений / под ред. проф. Хомоненко А.Д., 6-ое изд. – М.:Бином-Пресс; СПб.:Корона-Век, 2007.-736с. Гл.5 175 -194

Дополнительная литература

Учебник / Учебное пособие Раздел Страницы
1. Коннолли Т., Бегг К., Страчан А. Базы данных: проектирование, реализация и сопровождение. Теория и практика, 2-е изд.: Пер. с англ. - М.: Издательский дом “Вильямс”,. 2001. – 1120 с.: ил. 4.3 – 4.5, 6.1 - 6.8 159 – 168, 223 - 240
2. Дейт К. Дж. Введение в системы баз данных, 6-е издание: Пер. с англ. – К.;М.; СПб.: Издательский дом “Вильямс”,. 1999. – 848 с.: ил. (7-е и 8-е издание). 9.1 – 9.3, 10.1 – 10.3 271 – 274, 288 – 301

 

Тема 4. Работа с данными. Язык баз данных

Лекция №4. Основные понятия языка баз данных на примере SQL

В рамках данной лекции рассматриваются нижеследующие вопросы:

· Понятие языка программирования баз данных.

· Языки DDL, DML, DCL.

· DML: процедурные и декларативные языки; операции низкого и высокого уровней

· Хранимые и формируемые объекты базы данных

· DML: операторы создания хранимой и виртуальной таблицы, вставки, выборки обновления

· Ограничения

Языки для работы с базами данных зависят от того, какую модель данных поддерживает СУБД: реляционную, иерархическую или сетевую.

Применительно к СУБД различают языки низкоуровневой обработки, в которых в одной операции осуществляется обработка одной записи, и языки высокоуровневой обработки, в одной операции которых обрабатывается совокупность записей.

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

Язык SQL, или язык структурированных запросов (Structured Query Language), ориентирован на использование в реляционных СУБД. Он прошел несколько этапов своего развития и первоначально создавался с целью получения языка запросов, приближенного к естественному (английскому). Операторы, или предложения (statements), языка имеют сложную структуру, напоминающую конструкцию сложно-подчиненного предложения, в котором имеются главное и подчиненное (clause) предложения.

Язык SQL является машинно-независимым и декларативным, т.е., описывающим свойства искомого объекта, а не алгоритм его поиска, причем описывающим в машинно-независимом текстовом формате. В настоящее время SQL стандартизован, чтобы его понимали серверы различных производителей.

Язык развивается в части состава операторов и типов данных. В нем выделены следующие языки, соответствующие функциональным группам операторов:

· Data Definition Language (DDL). Язык описания данных. Содержит операторы, позволяющие определять структуру и свойства базы данных, объектов в БД и задавать связи между объектами (например, CREATE TABLE, CREATE VIEW).

· Data Manipulation Language (DML). Язык манипулирования данными. Содержит операторы, предназначенные для обработки данных, т.е. для того, чтобы выбирать, добавлять, удалять и модифицировать данные (SELECT, INSERT, DELETE, UPDATE).

· Transaction Control Language (TCL). Язык управления транзакциями. Операторы этого языка применяются для управления транзакциями, или логическими единицами работы, выполняемыми как атомарная операция.

· Data Control Language (DCL). Операторы языка применяются для осуществления административных функций назначения или отмены разрешений на использование базы данных, таблицы в базе данных, а также выполнения операторов SQL.

· Cursor Control Language (CCL). Операторы используются для определения объекта «курсор», подготовки SQL-предложений для выполнения, а также для некоторых других операторов.

 

Работа по реализации БД начинают с описания ее схемы на языке DDL.

В стандарте SQL-92 схема является коллекцией объектов базы данных, принадлежащих одному пользователю и образующих одно пространство имен. Пространством имен является набор объектов, в котором не может быть повторяющихся имен. Схема может быть представлена графически и иначе ее называют структурой базы данных.

Схема представляет структуру БД: состав, структуру, свойства и связи объектов базы данных.

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

· Какую сущность будет представлять таблица, или каково назначение таблицы.

· Число столбцов в таблице и тип данных и формат (если это необходимо) каждого столбца.

· Имеются ли столбцы, которые могут принимать значения NULL.

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

· Какие столбцы должны использоваться в качестве первичных ключей, а какие - в качестве внешних.

Сокращенный синтаксис оператора CREATE TABLE показывает структуру описания таблицы, задание ограничений на таблицу и столбцы, а также виды ограничений.

CREATE TABLE имя_таблицы ({<определение столбца> | < определение вычисляемого столбца>} [ <ограничение таблицы> ] [ ,...n ] )

< определение столбца> ::=имя столбца <тип данных> [< ограничение столбца>]

Ограничение столбца:

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

{ { PRIMARY KEY | UNIQUE }

[ CLUSTERED | NONCLUSTERED ] | [ FOREIGN KEY ]

REFERENCES [ имя связанной таблицы [ ( связанный столбец ) ]

[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]

[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] }

 

Рассмотрим примеры применения операторов языка SQL.

1) Таблицы должны находиться в базе данных. Поэтому сначала необходимо создать БД:

CREATE DATABASE TestData;

2) Создание таблицы с данными о студентах:

CREATE TABLE dbo.Students (StudentID int PRIMARY KEY NOT NULL,

StudentName varchar(25) NOT NULL, Stipend money NULL,

StudentDescription text NULL)

Объекты в БД могут быть хранимыми и формируемыми (т.е. создаваемыми динамически). Таблица обычно является хранимым объектом. На основе одной или нескольких таблиц можно динамически создавать виртуальную таблицу, или представление. При этом СУБД будет сохранять не сформированную таблицу, а оператор, который описывает ее формирование. Представление называется VIEW и соответствующий оператор его создания имеет синтаксис:

CREATE VIEW [ имя представления [ (столбец [ ,...n ] ) ]