我正在开发一个应用程序并对数据库设计有疑问。我有一个名为'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;
答案 0 :(得分:3)
他们是两种方法。让我们知道new
是consultant_banch的新列表,old
是旧列表:
删除不在old
中的所有new
,然后插入new
以外的所有old
。对于开发人员来说,这是最繁琐的方法,而且数据库方面成本很高,但如果关系表具有其他属性而不是主键(两个id)或被其他表引用,则需要 >
如您所说,替换 old
new
删除old
并插入new
。
分析师将针对您的案例做出最佳算法的决策,同时考虑优先点并增加应用前景。
在任何情况下,都不要忘记将所有操作都包含在单个事务中,以避免数据库状态不一致。 InnoDB支持交易。