2011-08-21 37 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 
    ) 
相关问题