Mysql 数据库设计SQL-编辑期间插入复选框值
我正在开发一个应用程序,有一个关于数据库设计的问题。我有一个名为“顾问”的表、一个名为“分支”的表和一个包含顾问id和所选分支id集合的表 在插入新顾问的过程中,所有分支机构的名称都显示在复选框中。用户填写有关顾问的信息并选中某些复选框。有关顾问的信息将插入到“顾问”表中,选定的分支机构将插入到包含“顾问id”和“分支机构id”的“顾问分支机构”表中。这个数据库设计正确吗 其次,我知道我会在保存期间将所选分支插入consultant_branch表。但是,在编辑过程中,我将如何做到这一点?是否删除所有顾问ID并将所选分支再次保存到“顾问分支”表中?下面是SQL:Mysql 数据库设计SQL-编辑期间插入复选框值,mysql,sql,database,database-design,database-schema,Mysql,Sql,Database,Database Design,Database Schema,我正在开发一个应用程序,有一个关于数据库设计的问题。我有一个名为“顾问”的表、一个名为“分支”的表和一个包含顾问id和所选分支id集合的表 在插入新顾问的过程中,所有分支机构的名称都显示在复选框中。用户填写有关顾问的信息并选中某些复选框。有关顾问的信息将插入到“顾问”表中,选定的分支机构将插入到包含“顾问id”和“分支机构id”的“顾问分支机构”表中。这个数据库设计正确吗 其次,我知道我会在保存期间将所选分支插入consultant_branch表。但是,在编辑过程中,我将如何做到这一点?是否删
CREATE TABLE IF NOT EXISTS `consultant` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`street` varchar(50) NOT NULL,
`plz` varchar(10) NOT NULL,
`city` varchar(10) NOT NULL,
`status` int(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `branch` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`status` int(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `consultant_branch` (
`consultant_id` int(10) NOT NULL,
`branch_id` int(10) NOT NULL,
KEY `consultant_id` (`consultant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `consultant_branch` ADD CONSTRAINT `FK_bbb` FOREIGN KEY (`consultant_id`) REFERENCES `consultant` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
它们是两种方法。让我们看一下
new
是新的顾问名单,而old
是旧的:
new
中的old
,然后插入所有不在old
中的new
。对于开发人员来说,这是最繁琐的方法,而且在数据库方面成本很高,但如果关系表具有主键(两个id)以外的其他属性,或者其他表引用了,则需要使用该方法new
删除old
并插入new
来替换old
在任何情况下,不要忘记在单个事务中包含所有操作,以避免数据库状态不一致。InnoDB支持事务。咨询分公司的主键是什么?(我猜这是两列的组合,但为什么缺少ir?)我认为不需要主键,因为该表可能有多个相同的咨询师id条目。我想确保的是,该方法是否正确,以及当用户编辑咨询师的选定分支机构时,我会做什么。我将使用
主键(咨询师id,分支机构id)
,外键
(您已有的)和另一个外键分支\u id引用分支(分支\u id)
。删除顾问的所有分支,然后重新插入是最容易实现的。您不必太担心外键,因为您只需要从顾问分支表中删除。从顾问表中删除时,您应该注意。@samyi:是的,但他后来添加了(或计划添加)其他引用这个连接表的表,他必须考虑到这一点。