2012-03-07 92 views
1

我正在創建用於添加電影的存儲過程(我正在處理存儲和列出帶有信息的電影的應用程序),並且在開始之前,我想了解一些關於如何創造它。添加電影的存儲過程

我有以下表格:

  1. 「電影」(MovieID,名稱,年份,長度,摘要)
  2. 「流派」,這是流派(GenreID,流派)
  3. 名單
  4. 「MovieGenre」,這是一個電影及其流派的列表。 (MovieGenreID,GenreID,MovieID)
  5. 「MovieRole」,它存儲的演員/導演等(MovieRoleID,名稱)的名稱
  6. 「MovieRoleType」,它存儲不同類型的角色的電影,像演員(MovieRoleTypeID ,MovieRoleType)
  7. 「演員」,這是投的電影(CastID,MovieRoleTypeID,MovieID,MovieRoleID)的列表

當增加一個電影,你必須提供所有有關電影的信息,以及至少一個電影角色(例如演員)和風格。我應該創建幾個SP:並從一個SP執行它們,或者我該怎麼做?

注:我不是要求你爲我寫整個SP,只是要求一些指導。

在此先感謝!

回答

3

我會創建幾個單獨的存儲過程,然後使用事務來確保插入一起提交。

您將需要單獨的SP來添加額外的演員,流派等。對於我來說,擁有一個大型SP以及調用SP的所有支持代碼並不重要添加一個新的電影+角色+流派,然後有單獨的SP(和支持代碼)來複制角色和流派的添加。使用交易將有效地將所有單獨的SP包裝成一個單獨的操作,使其看起來幾乎像一個SP,但同時也使您可以靈活地使用單個SP。

無論如何,您將需要支持代碼來調用每個單獨的SP。將驗證參數,處理錯誤,設置SP值等的代碼。因此,您需要在應用程序中使用AddRole,AddGenre等函數。我寧願在我的代碼中有一個名爲AddMovie的函數來啓動一個事務,然後調用這些單獨的函數。將作業分成小的,易於測試的部分,然後通過調用您知道工作的較小部分來構建較大的函數(AddMovie)。構建一個稱爲不同SP的AddMovie函數將會複雜得多,它基本上完成了許多與已有工作相同的工作。

1

我會爲每個實體創建一個sproc,然後可能將它們包裝在一個名爲「AddNewMovie」的單獨SP中或其他。

AddNewMovie只會調用其他sprocs。爲了獲得額外的獎勵,將它們包裝在交易中。

如果您不熟悉交易,MSDN有pretty good article