Главная > Построение баз данных в среде Oracle
<< Предыдущий параграф Следующий параграф >>
Пред.
След.
Макеты страниц

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

Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике

3.5.1 Создание суррогатных ключей с помощью последователь­ностей

Последовательность (sequence) это объект, который генерирует ряд последовательных уникальных чисел. Следующий оператор определяет последовательность под названием CustID, которая начинается с 100 и увеличивается на 1 при каждом использовании:

Create Sequence CustID Increment by 1 start with 100;

Для нас являются важными два метода последовательностей. Ме­тод NextVal выдает следующее значение в последовательности, а ме­тод CurrVal выдает текущее значение в последовательности. Так, CustID.NextVal выдает следующее значение в последовательности CustID. С помощью последовательности можно вставить строку в таблицу CUSTOMER, как показано ниже:

INSERT INTO CUSTOMER (CustomerlD, Name, AreaCode, PhoneNumber)
VALUES (CustID.NextVal, 'Mary Jones', '350', '555-1234');

Этот оператор создаст в таблице CUSTOMER строку, где столбцу CustomerlD будет присвоено следующее значение в последовательности CustID.

К сожалению, использование последовательностей не гарантирует кор­ректность значений суррогатных ключей. Во-первых, любой разработчик может использовать существующую последовательность для произволь­ных целей. Если последовательность используется для каких-либо иных целей, нежели генерация суррогатных ключей, некоторые значения в ней будут пропущены. Вторая, более серьезная проблема заключается в том, что в схеме нет ничего, что запрещало бы выполнить вставку без исполь­зования последовательности. Так, Oracle примет без возражений оператор

INSERT INTO CUSTOMER
(CustomerlD, Name, AreaCode, PhoneNumber)
VALUES (324, 'Mary Jones', '350', '555-1234');

Возможно, что выполнение этого оператора приведет к появлению оди­наковых значений суррогатного ключа. В этом случае Oracle не позволит выполнить вставку, поскольку атрибут CustomerlD определен как первич­ный ключ. Следовательно, возникает потребность в коде, который бы об­рабатывал эту исключительную ситуацию. Наконец, есть вероятность, что кто-то случайно использует не ту последовательность для вставки в таб­лицу.

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

 

Categories

1
Оглавление
email@scask.ru