Читать в оригинале

<< ПредыдущаяОглавлениеСледующая >>


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.

 



<< ПредыдущаяОглавлениеСледующая >>