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