Mysql 数据库设计SQL-编辑期间插入复选框值

Mysql 数据库设计SQL-编辑期间插入复选框值,mysql,sql,database,database-design,database-schema,Mysql,Sql,Database,Database Design,Database Schema,我正在开发一个应用程序,有一个关于数据库设计的问题。我有一个名为“顾问”的表、一个名为“分支”的表和一个包含顾问id和所选分支id集合的表 在插入新顾问的过程中,所有分支机构的名称都显示在复选框中。用户填写有关顾问的信息并选中某些复选框。有关顾问的信息将插入到“顾问”表中,选定的分支机构将插入到包含“顾问id”和“分支机构id”的“顾问分支机构”表中。这个数据库设计正确吗 其次,我知道我会在保存期间将所选分支插入consultant_branch表。但是,在编辑过程中,我将如何做到这一点?是否删

我正在开发一个应用程序,有一个关于数据库设计的问题。我有一个名为“顾问”的表、一个名为“分支”的表和一个包含顾问id和所选分支id集合的表

在插入新顾问的过程中,所有分支机构的名称都显示在复选框中。用户填写有关顾问的信息并选中某些复选框。有关顾问的信息将插入到“顾问”表中,选定的分支机构将插入到包含“顾问id”和“分支机构id”的“顾问分支机构”表中。这个数据库设计正确吗

其次,我知道我会在保存期间将所选分支插入consultant_branch表。但是,在编辑过程中,我将如何做到这一点?是否删除所有顾问ID并将所选分支再次保存到“顾问分支”表中?下面是SQL:

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

  • 分析员将考虑到previos的观点和增长的应用前景,决定适合您案例的最佳算法


    在任何情况下,不要忘记在单个事务中包含所有操作,以避免数据库状态不一致。InnoDB支持事务。

    咨询分公司的主键是什么?(我猜这是两列的组合,但为什么缺少ir?)我认为不需要主键,因为该表可能有多个相同的咨询师id条目。我想确保的是,该方法是否正确,以及当用户编辑咨询师的选定分支机构时,我会做什么。我将使用
    主键
    (咨询师id,分支机构id)
    外键
    (您已有的)和另一个
    外键分支\u id引用分支(分支\u id)
    。删除顾问的所有分支,然后重新插入是最容易实现的。您不必太担心外键,因为您只需要从顾问分支表中删除。从顾问表中删除时,您应该注意。@samyi:是的,但他后来添加了(或计划添加)其他引用这个连接表的表,他必须考虑到这一点。