Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将新数据和旧数据从另外两个表插入到表中_Sql - Fatal编程技术网

Sql 将新数据和旧数据从另外两个表插入到表中

Sql 将新数据和旧数据从另外两个表插入到表中,sql,Sql,我有一个表名Queue\u info,结构如下 Queue_Id number(10) Movie_Id number(10) User_Id Varchar2(20) Status Varchar2(20) Reserved_date date 我还有另外两个名为Movie\u info的表,它们有许多列,包括Movie\u Id和User\u info两个表,它们有许多列,包括User\u Id 在第一个表movie\u id中,用户id是movie\u info(movie\u id)和

我有一个表名
Queue\u info
,结构如下

Queue_Id number(10)
Movie_Id number(10)
User_Id Varchar2(20)
Status Varchar2(20)
Reserved_date date
我还有另外两个名为
Movie\u info
的表,它们有许多列,包括
Movie\u Id
User\u info
两个表,它们有许多列,包括
User\u Id

在第一个表
movie\u id中,用户id
movie\u info(movie\u id)
user\u info(user\u id)
的外键

我的问题是,如果我在
Movie\u info
User\u info
中插入任何值,则
Queue\u info
表应更新为每个用户或每个电影的新条目

比如说
如果在
Movie\u info
中插入新电影,则应更新
queue\u info
中每个用户等待新电影的状态。

使用from触发器。通过使用触发器,可以将所有相关表更新到表中。例如,如果表1中插入了一行,那么表2中也会插入一行。

使用from触发器。通过使用触发器,可以将所有相关表更新到表中。例如,如果表1中插入了一行,那么表2中也会插入一行。

首先需要注意的是:

  • 我真的很喜欢你有一个标准化的方式命名表和字段。我会使用
    Queue
    而不是
    Queue\u info
    Movie
    而不是
    Movie\u info
    ,等等,因为所有表格都有信息,不是吗我们都知道这一点。我也会选择
    MovieId
    而不是
    Movie\u Id
    ReservedDate
    而不是
    ReservedDate
    ,但这是个人品味的问题(对下划线过敏)。
    我想强调的是,选择一种命名和保存方法非常好

  • 我不喜欢的是,虽然您的结构似乎正常化了,但是您使用
    Varchar
    类型作为
    User\u id
    键。如果主键(和外键)尺寸较小且大小恒定,则它们是最好的。这主要有助于保持索引大小较小(因此效率更高),其次是因为键是数据库中重复存储的唯一值(因此有助于保持数据库大小较小)


现在,对于你的问题,你真的需要这个吗?我的意思是,你的数据库中可能有成千上万的电影和用户。每当插入新电影时,是否要在
队列
表中添加1000行?或者在注册新用户时再注册1000行?或者,当一个包含50部新电影的新列表到达(并插入到数据库中)时,有50000行

拥有10K电影和2K用户,您将拥有一个2000万行的表格。这种大小的表没有问题,一个或多个触发器将满足您的需要。如果你有10万部电影和5万用户,会发生什么?一张5G行的桌子。您也可以处理这个问题,但也许您可以只在该表中保留用户感兴趣的电影(或者已经借来或看过的电影,无论db的用途是什么)。如果您想获得某个用户尚未感兴趣的电影列表,请检查表中不存在的
Movie\u 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
      )
首先请注意:

  • 我真的很喜欢你有一个标准化的方式命名表和字段。我会使用
    Queue
    而不是
    Queue\u info
    Movie
    而不是
    Movie\u info
    ,等等,因为所有表格都有信息,不是吗我们都知道这一点。我也会选择
    MovieId
    而不是
    Movie\u Id
    ReservedDate
    而不是
    ReservedDate
    ,但这是个人品味的问题(对下划线过敏)。
    我想强调的是,选择一种命名和保存方法非常好

  • 我不喜欢的是,虽然您的结构似乎正常化了,但是您使用
    Varchar
    类型作为
    User\u id
    键。如果主键(和外键)尺寸较小且大小恒定,则它们是最好的。这主要有助于保持索引大小较小(因此效率更高),其次是因为键是数据库中重复存储的唯一值(因此有助于保持数据库大小较小)


现在,对于你的问题,你真的需要这个吗?我的意思是,你的数据库中可能有成千上万的电影和用户。每当插入新电影时,是否要在
队列
表中添加1000行?或者在注册新用户时再注册1000行?或者,当一个包含50部新电影的新列表到达(并插入到数据库中)时,有50000行

拥有10K电影和2K用户,您将拥有一个2000万行的表格。这种大小的表没有问题,一个或多个触发器将满足您的需要。如果你有10万部电影和5万用户,会发生什么?一张5G行的桌子。您也可以处理这个问题,但也许您可以只在该表中保留用户感兴趣的电影(或者已经借来或看过的电影,无论db的用途是什么)。如果您想获得某个用户尚未感兴趣的电影列表,请检查表中不存在的
Movie\u 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
      )

为什么要自动为每个用户更新一部新电影?正在使用哪个数据库?为什么要用新电影自动更新每个用户?你在使用哪个数据库?