Целостность реляционных данных сводится к целостности сущностей и целостности внешних ключей. Для того, чтобы обойти проблему неизвестных или неполных данных, в БД используется значение null. В операциях выборки данных при сравнении со значением null результат остается неизвестным. Возникает необходимость трехзначной логики: true, false, null. Что затрудняет реализацию СУБД.
При использовании null-значений для данных в логических операциях OR, AND, Отрицание возникает результат unknown.
2. Целостность внешних ключей
Операции, которые могут нарушить ссылочную целостность для родительского отношения
1. Вставка кортежа в родительское отношение. Так как допустимо существование кортежей, на которые нет ссылок в дочернем отношении, вставка кортежей в родительские отношения НЕ нарушает ссылочную целостность.
2. Обновление кортежа в родительском отношении. Например обновление ключа «31 Сидоров». При обновлении может измениться значение первичного ключа, и если в род. отношении есть значения ключа, которые ссылаются на кортеж, значения внешних ключей становится некорректным.
3. Удаление кортежа в родительском отношении. Например, Сидорова уволили. Приводит к удалению значения первичного ключа.
Операции, которые могут нарушить ссылочную целостность для родительского отношения
1. Вставка кортежа в доч.отношение, на которое нет ссылки в род., нарушает целостность.
2. Обновление кортежа в доч.отношении изменяет значение первичного ключа, что нарушает целостность.
3. Удаление кортежа в доч.отношении – допускается.
3. Поддержание ссылочной целостности
1. Restrict [Ограничение] не разрешать выполнение операций, приводящих к нарушению. Для этого проверять, есть ли связанные с удаляемым род.кортежем кортежи в доч.отношении.
2. Cascade [Каскадирование] разрешить выполнение с внесение поправки в др.отношения для сохранения имеющихся связей. Если какая-ибо из каскадных операций не выполнима, отказаться от операции и откатить базу в исходное состояние.
3. Set null – разрешить выполнение операций, некорректные значения заменять на null. Установить, с каким род.кортежем связан дочерний – невозможно.
4. Set default – разрешить, некорректные заменить на исходные значения, в род.отношении должен существовать некий кортеж, первичный ключ которого принят за дефолтный. Такой кортеж не удаляем и не изменяем его ключ.
5. Ignor – при нарушении целостности ничего не происходит.
Обновление кортежей в род.отношении
1. Restrict – не разрешает обновление, если хотя бы 1 кортеж ссылается на обновленный.
2. Cascade – применяется вместо первого.
3. Set null можно, но не желательно.
Удаление кортежа в род.отношении 3 2 1
Вставка кортежа в доч.отношение 1 3 4
Обновление кортежа в доч.отношении 1 4 3
4. Запросы на удаление
DELETE test.Марка, * FROM test WHERE (((test.Марка)='Nissan Skyline'));
DELETE FROM <Имя Таблицы> WHERE <Условие отбора записей>
В случае, если критерий отбора не определён, выполняется удаление всех записей.
5. Функциональные зависимости
Атрибуты находятся в функц.зависимости, если во всех кортежах, имеющих одинаковое значение атрибута Х также совпадает значение атрибута У. Функциональная зависимость обозначается X →Y.
Чтобы устранить зависимость атрибутов от части составного первичного ключа, нужно декомпозировать отношения на несколько. При этом атрибуты выносятся в отдельное отношение.
6. Нормализация
1 нормальная форма. Обычное отношение где:
- нет одинаковых кортежей,
- кортежи не упорядочены,
- атрибуты не упорядочены и отличаются по наименованию. Все значения атрибутов – простые типы.
Продажа |
|||||
Код |
Автомобиль |
Цвет |
Покупатель |
ДатаПродажи |
Цена |
1 |
Mazda 3 |
Красный |
Земцов Никита Сергеевич |
01.05.2010 |
567 000,00р. |
2 |
Синий |
Арбузов Данил Вадимович |
23.03.2011 |
210 000,00р. |
|
Продажа |
|||||
Код |
Автомобиль |
Цвет |
Покупатель |
ДатаПродажи |
Цена |
1 |
Mazda 3 |
Красный |
Земцов Никита Сергеевич |
01.05.2010 |
567 000,00р. |
2 |
Mazda 3 |
Синий |
Арбузов Данил Вадимович |
23.03.2011 |
210 000,00р. |
Методы приведения к 1NF:
§ Устраните повторяющиеся группы в отдельных таблицах (одинаковые строки).
§ Создайте отдельную таблицу для каждого набора связанных данных.
§ Идентифицируйте каждый набор связанных данных с помощью первичного ключа (добавить уникальный id для каждой строки)
2 нормальная форма Отношение в 1НФ, и при этом все неключевые атрибуты зависят только от первичного ключа.
если таблица приведена к 1НФ и у нее установлен уникальный id для каждой строки, то она находится и во 2НФ.
Например. Эта таблица находится в первой нормальной форме, но не во второй.
Категория |
Дата |
Скидка |
Товар |
Книги |
10.10.2008 |
10% |
PHP for dummies |
Ноутбуки |
11.10.2008 |
20% |
Acer |
Книги |
10.10.2008 |
10% |
Windows XP |
В этой таблице первичный ключ составляют первые два столбца (Категория и Дата). Скидка функционально полно зависит от них обоих, так как определяется одновременно категорией и датой. А вот с товаром проблемы. Она зависит только от категории и не зависит от даты (в любой день будет лежать там, пока не купят). Поэтому, говорят, что он зависит функционально не полно от всего первичного ключа и функционально полно от его части (Категория). Это нарушает требования второй нормальной формы.
Исправляется это разделением этой таблицы на две другие:
Категория |
Дата |
Скидка |
Книги |
10.10.2008 |
10% |
Ноутбуки |
11.10.2008 |
20% |
Книги |
10.10.2008 |
10% |
Категория |
Товар |
Книги |
PHP for dummies |
Ноутбуки |
Acer |
Книги |
Windows XP |
Вот и все. Теперь эти таблицы находятся во второй нормальной форме.
3 нормальная форма. Отношение во 2НФ и каждый неключевой атрибут зависит только
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.