Из Учебного руководства по Java Sun:
, Почему Использование Вложенные Классы? Существует несколько неопровержимых доводов использования вложенных классов среди них:
Логическая группировка classes—, Если класс полезен только для еще одного класса, то логично встроить его в тот класс и держать два вместе. Вложение такие "классы помощника" делает их пакет более оптимизированным.
Увеличенные encapsulation— Рассматривают два класса верхнего уровня, A и B, где B нужен доступ к членам, который был бы иначе объявлен частный. Путем сокрытия класса B в классе A члены A могут быть объявлены частные, и B может получить доступ к ним. Кроме того, B самостоятельно может быть скрыт от внешнего мира. < - Это не относится к реализации C# вложенных классов, это только относится к Java.
[еще 118] читаемый, удобный в сопровождении code— Вложенные маленькие классы в классах верхнего уровня помещает код ближе туда, где это используется.
Вам нужно создать новый столбец, заполнить его значениями PK, а затем создать PK в новом столбце, например:
SQL> create table no_pk_tab (c1 varchar2(10), c2 varchar2(10))
Table created.
SQL> insert into no_pk_tab values ('one', 'one')
1 row created.
SQL> insert into no_pk_tab values ('two', 'two')
1 row created.
SQL> alter table no_pk_tab add (id integer)
Table altered.
SQL> create sequence no_pk_seq
start with 1
increment by 1
Sequence created.
SQL> update no_pk_tab set id = no_pk_seq.nextval
2 rows updated.
SQL> select * from no_pk
C1 C2 PK_COL
---------- ---------- ----------
one one 1
two two 2
2 rows selected.
SQL> alter table no_pk add primary key (pk_col) using index
Table altered.
В зависимости от того, сколько строк в вашей таблице, может потребоваться некоторое время для заполнения значений последовательности, но это будет работать.
Я использую SQL Developer при администрировании базы данных Oracle. Просто создайте столбец и добавьте ограничение в базу данных, например:
sql> alter table Employee add constraint Employee_pk primary key(Employee_ID);
Возможно, см. здесь для получения более подробной информации.
Редактировать:
Теперь, когда я переосмыслил это, вы сможете сделать это при миграции
add_column :table, :id, :primary_key
Затем вам нужно ввести некоторые данные внутри миграции. Просто код Ruby, который выполняет итерацию и добавляет ваш index. См. seed_fu и db-populate для получения помощи. Rails 3 позволит вам заполнять данные с помощью rake db: seed.
Используйте alter table для добавления столбца pk.
Напишите сценарий для установки новых значений столбца pk с приращением (своего рода цикл).
После того, как сценарий будет готов, снова используйте команду alter table, чтобы установить для столбца значение primary_key и автоинкремент, установка начального значения приращения на table_size + 1.