2012-06-13 73 views
1

我有一张名为tbl_Subjects_Taken的表格,其中列出了学生采取的所有科目。它只包含两列,Stud_IDSubj_ID数据库 - 编辑过程

走到前端,我有一个表单,让用户可以编辑关于学生本身和该学生采取的主题的信息。更新tbl_Students(学生信息)不是一个问题,因为单个UPDATE语句可以完成这项工作。但是另一张桌子呢?

一旦用户编辑表单并按下保存按钮,这里是我做的:

  1. 删除由学生tbl_Subjects_Taken采取的所有科目。
  2. 添加表单中的所有主题(在我的程序中)。

这真的是更新“多面”表格的正确方法吗?我使用SQL服务器

回答

1

删除和重新添加是一种方法。

但我会尽量在服务器上做所有事情(例如使用存储过程)。我会将主题ID列表传递给SP。 SP的内部,我将做到以下几点:

  1. 删除所有科目从tbl_Subjects_Taken对于在我通过在
  2. 补充一点都不在tbl_Subjects_Taken表中的任何科目入榜用户这在我传递的列表。

你没有提到你的数据库是,但也有不同的方法去这取决于你使用的是什么DB。例如,在Oracle和ODP.Net中,可以使用PL/SQL Associative array将ID传递给PL/SQL函数/ SP。

但理想情况下,您希望使一台服务器往返,并且希望尽可能少地删除和插入。这两个步骤应该会带来很好的效率。

+0

不错的方法,但是如果我知道的话,你认为我的相当可接受吗? – Arman

+0

@阿曼 - 这取决于很多因素。如果你只处理几个主题,也许你的方法很好。只有你知道答案。但对于数据库应用程序,您总是希望尽量减少服务器往返行程。那些往往会杀死你的表现。因此,如果可以的话,我总是试图用一个SP呼叫做所有事情。这种方法的美妙之处(例如,将SP用于大部分工作)是您将关键业务逻辑通过SP放入数据库中,然后该业务逻辑可以被其他应用程序重用。 – dcp

+0

谢谢,但同时我会用我的,因为只有很少的科目是关心的,但会尝试你以后说过的话。 – Arman