Целостность данных
Под целостностью понимают «правильность» данных, содержащихся в БД, по отношению к предметной области. Целостность данных подразделяется на следующие категории.
· Сущностная целостность
· Доменная целостность
· Ссылочная целостность
· Пользовательская целостность
Сущностная целостность
Целостность на уровне сущности означает обеспечение уникальности экземпляра сущности, т.е., строки в конкретной таблице. Она обеспечивается указанием ограничений целостности 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 ] ) ]