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

时间:2012-02-25 21:30:53

标签: mysql sql database database-design database-schema

我正在开发一个应用程序并对数据库设计有疑问。我有一个名为'consultant'的表,一个表'branch'和一个包含consultant_id和所选branch_id的集合的表。

在插入新顾问期间,所有分支名称都显示在复选框中。用户填写有关顾问的信息并选择某些复选框。有关顾问的信息被插入到顾问表中,并且所选分支被插入到表consultant_branch中,该表包括顾问的id和分支的id。这个数据库设计对吗?

其次我明白我会在保存期间将所选分支插入consultant_branch表。但是,在编辑期间我该怎么做?删除所有顾问ID并将选定的分支再次保存到consultant_branch表中?这里是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;

1 个答案:

答案 0 :(得分:3)

他们是两种方法。让我们知道new是consultant_banch的新列表,old是旧列表:

  1. 删除不在old中的所有new,然后插入new以外的所有old。对于开发人员来说,这是最繁琐的方法,而且数据库方面成本很高,但如果关系表具有其他属性而不是主键(两个id)或被其他表引用,则需要 >

  2. 如您所说,替换 old new删除old并插入new

  3. 分析师将针对您的案例做出最佳算法的决策,同时考虑优先点并增加应用前景。

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