我是mysql的新手,为了创建一个简单的数据库,我为3个表制定了以下规范:
DROP TABLE IF EXISTS representative;
CREATE TABLE representative(
id_representative VARCHAR(15),
name VARCHAR(15),
PRIMARY KEY(id_representative)
)ENGINE=InnoDB DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS congress;
CREATE TABLE congress(
id_congress INT,
PRIMARY KEY(id_congress)
)ENGINE=InnoDB DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS representative_congress;
CREATE TABLE representative_congress(
id_ai INT AUTO_INCREMENT,
id_representative VARCHAR(15),
id_congress INT,
party VARCHAR(2),
PRIMARY KEY(id_ai),
FOREIGN KEY(id_congress) REFERENCES congress(id_congress) ON UPDATE CASCADE,
FOREIGN KEY(id_representative) REFERENCES representative(id_representative) ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=latin1;
代表和会议表中的信息一旦插入就不会改变(对于两个不同的代表,我不会有两个相同的id_代表,或者两个不同的代表会有两个相等的id_congress)。但是,deleg_congress表用于这样的情况:在同一次大会(时间跨度为2年)中,给定的代表会改变各方(或者甚至可以在未来添加到表中的更多字段),所以我会具有相同的id_representative链接到同一个国会的不同党派,甚至更多的领域。
考虑到这一点,我有两个问题:
我是否需要在表格规范或插入查询中添加任何约束?请记住,信息将被添加到表中一次,只有在表/数据库被删除时才会被更改。
有没有办法,只需一个INSERT查询,插入 一次属于两个不同表的信息,如某种级联命令?例如,id_representative,属于代表和代表_表格。
提前致谢
答案 0 :(得分:0)
约束条件良好,代表和会议表的主键确保了该信息的完整性,而represent_congress中的外键阻止了错误的关系,唯一的考虑因素是无法插入到representative_congress之前在前面的表格中插入id。
在只有一个insert语句的两个(或多个)表中插入数据的方法是使用触发器,但是您需要为插入定义默认插入或逻辑,例如
CREATE TRIGGER trigger_name
AFTER INSERT
ON representative FOR EACH ROW
insert into representative_congress (id_representative, id_congress, party)
values (NEW.id_representative, 1, '01')