В зависимости от типа вашей таблицы (IIRC это MyISAM и BDB), есть умный прием, который вы можете использовать с автоинкрементом.
create table component_core (
component_id int auto_increment,
primary key(component_id)
);
create table component_history (
component_id int not null,
version_id int auto_increment,
data varchar(20),
version_start_date datetime not null,
version_end_date datetime not null,
primary key(component_id,version_id)
);
Вставить в component_core при создании нового компонента, а затем использовать этот автоинкрементный идентификатор в качестве component_id при вставке в component_history, и поле автоинкремента version_id там будет иметь значение от 1 и выше для каждого отдельного component_id. При вставке изменения в component_history используйте исходный component_id, но разрешите version_id для автоинкремента в обычном режиме. В этом случае сгенерированное значение для столбца auto_increment рассчитывается как MAX (auto_increment_column) + 1 WHERE component_id = данное-компонент_ид.
Insert a new component_core
Retrieve the last autoincremented value from component_core (1)
Insert a new component_history using the component_id from component_core
Insert a new component_history using the same component_id
Insert a new component_history using the same component_id
Insert a new component_core
Retrieve the last autoincremented value from component_core (2)
Insert a new component_history using the component_id from component_core
Insert a new component_history using the same component_id
Таблицы теперь будут содержать
component_core
component_id
1
2
component_history
component_id version_id
1 1
1 2
1 3
2 1
2 2
Не уверен, что метод поможет, особенно потому, что он ограничен определенными типами таблиц (я думаю, что он работает в MyISAM, но вы теряете контроль транзакций с MyISAM)
EDIT
Ссылка: http://dev.mysql.com/doc/refman/5.1/en/example-auto-increment.html