2011-08-21 83 views
2

我有一個表名Queue_info的結構與將數據插入到新的和舊的數據表,從另外兩個表

Queue_Id number(10) 
Movie_Id number(10) 
User_Id Varchar2(20) 
Status Varchar2(20) 
Reserved_date date 

我有很多列名爲Movie_info其他兩個表,包括movie_IdUser_info有許多列包括User_Id

在第一個表movie_id, user_id是來自movie_info(movie_id)user_info(User_id)的外鍵。

我的問題是,如果我插入無論是在Movie_infoUser_info任何值,則Queue_info表應爲每個用戶新條目或每部電影

例如 更新如果插入Movie_info爲新電影那麼queue_info應該更新爲每個用戶該新電影的狀態正在等待。

+1

爲什麼你想用新電影自動更新每個用戶?哪個數據庫正在使用? – Nivas

回答

0

使用從觸發器。通過使用觸發器,您可以將所有相關表更新到您的表中。例如,如果1行插入到表1中,則1行也插入到表2中。

0

的一些注意事項第一:

  • 我真的很喜歡你有一個標準化的方式來命名的表和字段。我會用Queue代替Queue_infoMovie代替Movie_info,等等,所有表都具有信息 - 不是嗎? - 我們都知道。我還選擇MovieId而不是Movie_IdReservedDate而不是Resedrved_date但是這是個人喜好(過敏下劃線)的問題。
    我想強調的是,選擇一種命名方式並保持它非常好。

  • 我不喜歡的是,雖然你的結構似乎正常化,但你使用Varchar類型的User_id鍵。主要(和外國)鑰匙是最好的,如果他們是小尺寸和恆定的大小。這主要有助於保持索引大小很小(所以更高效),其次是因爲這些鍵是在db中重複存儲的唯一值(所以它有助於保持較小的db大小)。


現在,你的問題,你真的需要嗎?我的意思是,你最終可能會在你的數據庫中擁有數千部電影和用戶。每當插入新電影時,是否要在Queue表中添加一千行?或者當新用戶註冊時有另外一千行?或者當有50個新電影的新列表到達(並插入到數據庫中)時,有5萬行?

隨着10K電影和2K的用戶,你就會有一個20M行表。這種大小的表格沒有問題,並且一個或多個觸發器將滿足您的需要。如果你有100K電影和5萬用戶,會發生什麼?一個5G行表。你也可以處理這個問題,但也許你可以只保留用戶感興趣的電影(或借用或已經看過的,無論數據庫的用途是什麼)。如果您想要某個用戶尚未感興趣的電影列表,請檢查表中不存在的那些Movie_Id。像這樣的東西:

SELECT 
    Movie_Id, Movie_Title 
FROM 
    Movie_info AS m 
WHERE 
    NOT EXISTS 
     (SELECT * 
     FROM Queue_info AS q 
     WHERE q.Movie_Id = m.Movie_Id 
      AND q.User_Id = @UserId 
    ) 
相關問題