【问题标题】:How relation between one record on a table and several records on onother table一张表上的一条记录与另一张表上的几条记录之间的关系如何
【发布时间】:2018-07-27 06:43:33
【问题描述】:

我的项目是一个类似于电影收藏的程序。 主表用于存储电影数据,其中包含名称、导演、发行年份和...等字段 但是每条记录都必须有另一个名为genre(流派)的属性。 每部电影都可以按一种或几种类型(喜剧、恐怖、历史、浪漫……)分类 Genre 表包含两个字段。ID:integer 和 Genre:vchar 对于每部电影,可以选择一些类型字段。 我怎么能做到这一点? 谢谢你

【问题讨论】:

标签: c# .net sql-server database diagram


【解决方案1】:

movie 表必须有一些movie_id 才能唯一标识每部电影。 它还必须有一个名为genre_id 的列(与genre 表中的列相同)以将电影与每个流派联系起来。

使用以下查询,您可以选择属于每个类型的电影:

SELECT M.movie_id
    ,M.movie_name
    ,G.genre_id
FROM movie M
LEFT JOIN genre G ON M.genre_id = G.genre_id

【讨论】:

    【解决方案2】:

    您需要 3 个表才能正确完成这项工作。

      Table Moovie :
      Moov_ID
      Moovie_Name
      Moov_DirectorID
      ...
    
      Table Genres:
      Genre_ID
      Genre_Name
      ...
    
    
      Table Moovie_Genre (Whic will link moovies and genres)
      Mg_ID
      Mg_MoovieID
      Mg_GenreID
    

    像这样你可以有一个多对多的关系。

    您可以在 moovie 表中使用字符串字段,以便使用逗号分隔的值来存储类型 ID,但我更喜欢多对多关系。

    【讨论】:

      【解决方案3】:

      只是为了扩展 Oskon 的答案;脚本可能如下所示:(我在这里使用了临时表 - 只需删除 # 以使其永久化)

      ----create the tables
      CREATE TABLE #tblMovie 
        (
            MovieID int NOT NULL
            ,MovieName varchar(100) NULL
            ,MovieDirectorID int NULL
            ----add more fields here if you want
        )
      
        CREATE TABLE #tblGenre
        (
            GenreID int NOT NULL
            ,GenreName varchar(100) NULL
        )
      
        CREATE TABLE #tblMovieGenre ----this is where the genres of the movies are listed
        (
            MovieGenreID int NOT NULL --id for this table (just for indexing)
            ,MovieID int NOT NULL --movie id from #tblmovie
            ,GenreID int NOT NULL --genre id from #tblGenre
        )
      
        ----insert the information
        INSERT INTO #tblMovie (MovieID,MovieName,MovieDirectorID)
        VALUES (1,'Movie 1 Name',3)
        ,(2,'Movie 2 Name',10)
        ,(3,'Movie 3 Name',2)
      
        INSERT INTO #tblGenre (GenreID, GenreName)
        VALUES (1,'Comedy')
        ,(2,'Horror')
        ,(3,'Action')
        ,(4,'Thriller')
        ----add more genres 
      
        INSERT INTO #tblMovieGenre (MovieGenreID,MovieID,GenreID)
        VALUES (1,1,1) --movie 1 is a comedy
        ,(2,2,3) --movie 2 is an action movie
        ,(3,3,3),(3,3,4) --movie 3 is an action/thriller movie
      
        ----Now find the genres for a movie (run this bit as many times as you want)
        SELECT 
        T3.GenreName 
      
        FROM
        #tblMovie T1
        INNER JOIN #tblMovieGenre T2
        ON T1.MovieID = T2.MovieID
        LEFT OUTER JOIN #tblGenre T3
        ON T2.GenreID = T3.GenreID
      
        WHERE
        T1.MovieName = 'Movie 3 Name' --put your movie name here 
      

      【讨论】:

        猜你喜欢
        • 2019-08-30
        • 2018-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-22
        • 1970-01-01
        相关资源
        最近更新 更多