2012-06-13 108 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