Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Ораклу.doc
Скачиваний:
1
Добавлен:
10.08.2019
Размер:
467.46 Кб
Скачать

Практическая польза от уникальности записей

Что же дает правило уникальности?

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

Если у таблицы правила уникальности нет, то следует настроиться на работу с группой записей.

Естественно, что уникальность записей и дублирование записей это два несовместимых варианта. Всегда имеем один из них.

Обращаю внимание на то, что хранение записей в таблице с товарами и услугами имеет смысл, если для них есть соответствующая запись в таблице с шапкой счетов. Про такую зависимость между записями в двух таблицах, говорят: "Таблица EXPOS ссылается на EXDOC" или "Таблица EXDOC – главная, EXPOS - подчиненная”.

Очевидно следующее.

Во-первых. Зависимость "главная-подчиненная" предполагает, что колонки первичного ключа главной таблицы будут присутствовать в подчиненной таблице.

Во-вторых. Перед добавлением записи в таблицу с позициями или услугами нужно проверять наличие записи в таблице EXDOC.

В-третьих. Нельзя удалить запись из таблицы EXDOC, если у неё есть "ссылающиеся" записи в таблицах EXPOS и EXSVC.

Программист может организовать эти проверки с помощью правил ссылочной целостности. Это 5-ый тип правил декларативной целостности.

Типы первичных ключей

Как в базе данных реализовать уникальность записей?

С одной стороны просто, нужно выбрать комбинацию колонок для обеспечения уникальности. В случае с таблицами EXDOC и EXPOS это действительно просто. Рассмотрим более интересный вариант – таблицу с услугами EXSVC.

Р исунок 3. Таблица EXSVC с дополнительной колонкой.

Попробуем найти комбинацию, которая обеспечит уникальность. Это комбинация: номер счёта, дата счёта и название услуги. Уникальность достигается за счёт трех значений.

Но! Ещё раз вспомним команды манипулирования данными. Для обращения к одной записи придется в условиях отбора записей перечислить комбинацию из трёх значений. Должны будем указать значения для колонки "Номер счёта", значение для колонки "Дата счёта" и строку для колонки "Название услуги". Это придётся делать каждый раз. В ряде случаев очень не удобно: долго набирать на клавиатуре; чревато ошибками; программный код становиться громоздким.

На практике делают так. Создают колонку специально для хранения уникального значения. Программисту очень удобно. Команды манипулирования данными содержат всего одно условие.

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

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

Теперь вам будут понятны термины "естественный первичный ключ" и "суррогатный ключ".

Важно понимать. Естественную комбинацию значений конечный пользователь может задать самостоятельно. Суррогатное значение для него неизвестно и пользоваться им без помощи программиста он не сможет.

Ещё вариант заполнения таблицы услуг. Обратим внимание на записи для 152-го счёта. Видим, ситуацию дублирования записей. В действительности она не должна произойти. Если выписывается счёт, то в нем должна быть одна строка с услугами доставки. Использование суррогатного ключа позволяет получить такую ситуацию. По сути одна запись храниться дважды, хотя уникальность значений обеспечена за счёт колонки "Код записи". Для предотвращения этой ситуации необходимо наложить на таблицу два ограничения. Первое будет проверять значение в колонке "Код записи". Это первичный ключ. Второе проверяет уникальность в колонках "Номер счёта", "Дата счёта" и "Название услуги". Это правило - вторичный ключ. При отсутствии проверки естественной уникальности будем иметь дубликаты.

Лекция 8: Добавление ограничений. Создание первичного ключа.