一个表上的一个记录与另一个表上的多个记录之间的关系

时间:2018-07-27 06:43:33

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

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您需要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表中使用一个字符串字段,以便使用逗号分隔的值来存储genreID,但是,我希望具有多对多关系。

答案 2 :(得分:1)

只是扩大奥斯康的答案;脚本可能看起来像这样:(我在这里使用了临时表-只需删除#使其成为永久表即可)

----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