Oracle для профессионалов



              

Влияние стандартов - часть 2


Не надо бояться использовать специфические средства конкретной СУБД, — за них заплачено немало денег. В каждой СУБД есть свой набор уникальных возможностей, и в любой СУБД можно найти способ выполнить необходимое действие. Используйте в текущей СУБД лучшее и реализуйте новые компоненты при переходе на другие СУБД. Используйте соответствующие приемы программирования, максимально изолирующие остальную часть приложения от этих изменений. Эти же приемы программирования применяются разработчиками переносимых приложений, поддерживающих несколько ОС. Цель в том, чтобы в полной мере использовать имеющиеся средства, но при этом иметь возможность менять реализацию в каждом конкретном случае.

Например, типичная функция многих приложений баз данных — генерация уникального ключа для каждой строки. При вставке строки система должна автоматически сгенерировать ключ. В Oracle для этого предлагается объект базы данных — последовательность (SEQUENCE). В Informix имеется тип данных SERIAL. Sybase и SQL Server поддерживают тип данных IDENTITY. В каждой СУБД имеется способ решить эту задачу. Однако методы решения различны, различны и возможные последствия их применения. Поэтому знающий разработчик может выбрать один из двух вариантов:

  • разработать метод генерации уникального ключа, полностью независимый от СУБД;
  • согласиться с разными реализациями и использовать разные методы генерации ключей в зависимости от СУБД.
  • Теоретическое преимущество первого подхода состоит в том, что при переходе с одной СУБД на другую ничего менять не придется. Я назвал это преимущество "теоретическим", поскольку недостатки такого решения настолько велики, что делают его практически неприемлемым. Для создания полностью независимого от СУБД процесса придется создать таблицу вида:

    create table id_table (id_name varchar(30), id_value number); insert into id_table values ('MY_KEY', 0);

    Затем для получения нового ключа необходимо выполнить следующий код:

    update id_table set id_value = id_value + 1 where id_name = 'MY_KEY'; select id_value from id_table where id_name = 'MY_KEY';




    Содержание  Назад  Вперед