Предпочитан начин за добавяне на сурогатен ключ към съществуваща таблица на Oracle DB

Трябва да модифицирам съществуваща таблица в Oracle 10g DB с няколко хиляди записа, за да добавя сурогатен ключ за автоматично номериране. Един от начините, който ми идва наум е да

  1. Create a new sequence
  2. Create the id column, allowing null values
  3. Updating the id column with the sequence
  4. Alter table to add "not null" and "primary key" for the new id column

Има ли по-лесен или по-ефективен начин да направите това (или има някаква причина това да не работи)?


person simon    schedule 18.02.2010    source източник


Отговори (1)


Бих го направил по следния начин:

  1. Създайте колоната id, позволявайки нулеви стойности

  2. Издайте тази заявка:

    UPDATE  mytable
    SET     id = rownum
    
  3. Променете таблицата, за да добавите NOT NULL и PRIMARY KEY за новата колона с id

  4. Създайте последователността, като я поставите на MAX(id) + 1 и я използвайте за следващите вмъквания.

person Quassnoi    schedule 18.02.2010
comment
Здравейте, защо използвате max(id)+1, когато можете да използвате последователност? актуализирайте mytable set id=sequence.nextval - person Rene; 18.02.2010
comment
@Rene: всеки път, когато дадена последователност изчерпи кешираните стойности, тя се актуализира, което генерира запис в журнала за повторение. Използването на rownum е много по-бързо. - person Quassnoi; 18.02.2010
comment
Quassnoi, съгласен съм с подхода ти, ако имаме работа с megarows и го гласувах. Но изглежда прекалено много за няколко хиляди реда, както е посочено в първоначалния въпрос. И двата начина ще работят. - person Jim Hudson; 18.02.2010
comment
@Jim: със сигурност ще го направят, въпреки че едва ли виждам прекаляване тук :) - person Quassnoi; 18.02.2010