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) Этот оператор создаст в таблице CUSTOMER строку, где столбцу CustomerlD будет присвоено следующее значение в последовательности CustID. К сожалению, использование последовательностей не гарантирует корректность значений суррогатных ключей. Во-первых, любой разработчик может использовать существующую последовательность для произвольных целей. Если последовательность используется для каких-либо иных целей, нежели генерация суррогатных ключей, некоторые значения в ней будут пропущены. Вторая, более серьезная проблема заключается в том, что в схеме нет ничего, что запрещало бы выполнить вставку без использования последовательности. Так, Oracle примет без возражений оператор INSERT INTO CUSTOMER Возможно, что выполнение этого оператора приведет к появлению одинаковых значений суррогатного ключа. В этом случае Oracle не позволит выполнить вставку, поскольку атрибут CustomerlD определен как первичный ключ. Следовательно, возникает потребность в коде, который бы обрабатывал эту исключительную ситуацию. Наконец, есть вероятность, что кто-то случайно использует не ту последовательность для вставки в таблицу. Несмотря на возможность таких проблем, последовательности представляют собой лучший способ работы с суррогатными ключами в Oracle.
|