我有下表。Mysql自动增量备选方案
create table mytable(
physical_id int auto_increment,
logical_id int,
data varchar(20),
version_start_date datetime,
version_end_date datetime,
primary key(physical_id),
unique key(logical_id,version_start_date, version_end_date)
);
架构背后的想法是,我想跟踪修改,以 每一行并通过检查 version_start_date和version_end_date发现于任何特定日期的有效行。我想我的逻辑ID为 auto_increment,但mysql只允许一个id为auto_increment。
因此,我想在创建新行时将logical_id设置为physical_id。我能够使用触发器做到这一点。
delimiter $$
create trigger myTrigger before insert on mytable for each row begin set
new.logical_id = (select auto_increment from information_schema.tables
where table_schema = database() and table_name = 'mytable') ; end$$
delimiter ;
我检查了几个其他选项,http://feedblog.org/2007/06/20/portable-sequence-generation-with-mysql/和http://www.redhat.com/docs/en-US/JBoss_Hibernate/3.2.4.sp01.cp03/html/Reference_Guide/Native_SQL-Custom_SQL_for_create_update_and_delete.html
的问题,这些方法是,我要创建一个新的序列表,并保持插入一条记录到该表中。
有没有更好的选择?
谢谢
巴拉
-- Update
我不知道为什么@tpdi,为什么我需要家长,当我可以只是见下表效仿这一点。
create table logical_id_seq (
logical_id int auto_increment,
primary key(logical_id)
);
create table mytable (
physical_id int auto_increment,
logical_id int not null references parent(logical_id),
data varchar(20),
version_start_date datetime not null,
version_end_date datetime not null,
primary key(physical_id),
foreign key (logical_id) references logical_id_seq(logical_id),
unique key (logical_id,version_start_date,version_end_date)
);
我希望我的数据库是时间不可知的,从某种意义上说,数据库的数据在任何时间点都有效。 – Boolean 2010-07-27 17:36:02