这件事让我困扰了一会儿,我终于想要得到答案。以多对多的关系编辑关联表中的记录
假设我有员工和部门。这两者之间存在多对多关系,并且有一个名为EmployeeDepartments的关联表。
Employees
-------------------
EmployeeID (PK)
Departments
-------------------
DepartmentID (PK)
EmployeeDepartments
-------------------
EmployeeID (FK)
DepartmentID (FK)
我有一个页面,用户可以编辑员工。有一个复选框列表显示所有部门,并且该员工所属的部门将被检查。然后用户可以选中/取消选中该员工属于哪个部门。
当我编辑员工并去保存数据时,我该如何处理这些部门?
我一直在做的方式是删除该员工的EmployeeDepartments表中的每条记录。然后,对于用户选择的每个部门,我将其添加到EmployeeDepartments。
它的工作原理,但必须有一个更有效的方法来做到这一点,它似乎是错误的。如果员工在5个部门中,并且我将该员工添加到其他部门,则必须从EmployeeDepartments中删除5条记录,然后添加6条记录。
谢谢,我没有意识到数据库可以处理这样的东西,我必须看看它。 – Steven 2011-05-09 20:29:09
@Steven仅仅因为它*可以*,并不意味着*应该*; *)不要忘记实现的复杂性 - 更简单通常更好。而且,对于这样一小部分数据来说,没有实际的收益(甚至可能比基于增量生成几个“普通”插入和删除的“慢”)。 – 2011-05-09 20:44:01
MERGE是标准SQL:它是在[SQL:2003](http://en.wikipedia.org/wiki/SQL:2003)中引入的,但其他SQL产品(特别是SQL Server)提供了有用的扩展。 – onedaywhen 2011-05-10 08:00:19