请教用什么方案, 一个数据库 30多个表, 共用Id, Id且不重复, 这个表怎么设计:
我目前是想建一个只存ID的主表,
每次增加分表记录, 先在ID主表生成ID,再给分表用.
30多个分表的主键Id, 同时 一对一外键 ID主表
这样行不行,有什么更好的方案
请教用什么方案, 一个数据库 30多个表, 共用Id, Id且不重复, 这个表怎么设计:
我目前是想建一个只存ID的主表,
每次增加分表记录, 先在ID主表生成ID,再给分表用.
30多个分表的主键Id, 同时 一对一外键 ID主表
这样行不行,有什么更好的方案
采用主id表+触发器的方式进行设计,以下是设计思路。
1.使用Sequence表维护id
DROP TABLE IF EXISTS `sequence`;
CREATE TABLE `sequence` (
`tablename` varchar(64) NOT NULL,
`nextid` bigint(20) DEFAULT NULL,
PRIMARY KEY (`tablename`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
2.创建主键策略函数
DROP FUNCTION IF EXISTS `auto_seq`;
CREATE DEFINER = `root`@`localhost` FUNCTION `auto_seq`(tb_purpose VARCHAR(64))
RETURNS int(11)
BEGIN
DECLARE reid int;
set reid = (select `nextid` from `sequence` where `tablename`=tb_purpose limit 1);
update `sequence` set `nextid`=reid + 1;
return reid;
end;
3.在分表中创建触发器,此触发器为插入前触发,调用主键策略函数返回的结果赋予id
DROP TRIGGER `auto_seq`;
CREATE TRIGGER `auto_seq` BEFORE INSERT ON `item`
FOR EACH ROW begin
set new.id = auto_seq('item');
end;