3

假设我有三个表“Person”、“Area”和“Person_Area”。每个人可以在很多领域工作,每个领域可以有很多人在其中。“person_Area”是一个包含 person_id 和 area_id 的桥表

在我的代码中,我有两个位于人员表单上的 asp 列表框。列表框 1 包含所有可用区域,列表框 2 可以根据用户选择使用列表框 1 中的区域填充。放入列表框二的区域是一个人所在的区域。

这一切都很好,很容易,但是当我决定保存到我的数据库时,我不确定如何插入、更新、删除“person_Area”表。我不想为一个人重新插入一个区域,如果它已经在表中,并且如果用户从列表框 2 中删除了一个区域,当我回发到服务器时,代码如何知道删除它?

仅删除特定人员的“Person_Area”表中的所有记录然后重新添加所有当前用户选择是否合理?还是有更好的选择?我难住了。

4

2 回答 2

2

没有理由删除并重新插入。当您甚至不确定这些行是否已更改时,需要做很多工作。

在我看来,有两种合理的选择:

  1. 跟踪 UI 的“更改”(添加区域、删除区域),然后对数据库执行相同的操作(删除行、添加行)。(您必须考虑到有人添加了一个区域,然后在点击保存之前将其删除,反之亦然。只需取消您的内部标志,不要执行插入然后删除)

  2. 只需以某种逻辑顺序查询该用户的 person_area 表(与列表框的排序方式相同)。然后一次遍历记录集和列表框中的行。如果数据库有不在列表框中的行,请执行 DELETE。如果列表框有一个不在数据库中的条目,请执行 INSERT。

第二个听起来对我来说很直接,可能是我会采取的第一种方法。

于 2010-09-01T21:25:30.037 回答
0

如果您使用的是具有该MERGE命令的数据库系统,这将是一个好方法。该MERGE命令可以根据您的列表与表格内容的比较,在单个命令中处理INSERTUPDATE和操作。DELETE

于 2010-09-01T21:33:11.880 回答