我正在考虑我正在接受的数据库问题,即使它非常简单。我习惯使用ORM来为我提供后端SQL,但这不是一个选择。
我需要创建一个将流派映射到多部电影的数据库。例如,动作将映射到终结者,印第安纳琼斯和尖峰时刻。喜剧将被映射到The Big Lebowski和High Fidelity。我知道在一个真正强大的解决方案中,一部电影可以有多种类型,但是现在让我们忽略它。
解决此问题的最佳方法是什么,以便我可以按电影类型查询数据库并接收多部电影的列表?
答案 0 :(得分:1)
w3schools讲授sql的基础知识。我肯定会从那里开始。然后,您可能希望搜索DDL(数据定义语言)教程以了解如何正确创建表 - 每个数据库的语法各不相同。我做了一个快速搜索,看起来很有用:http://facility9.com/2010/07/postgresql-tutorial-creating-the-pagila-schema/。你不想“忽略”多种类型的问题,这就是数据库有用的原因。
根据您的具体情况,您基本上需要电影表,流派表和电影类型表。 (你需要批量更多,但这些应该涵盖你问题中的信息。)电影包含字段(标题,年份,导演等)中的电影信息,其中一个是主键。类型表类似地包含类型信息并且还具有主键。魔术发生在电影类型表中,该表具有主键和2个外键字段。一个用于电影主键,一个用于流派主键。例如,如果终结者电影的主键是1并且动作类型的主键是3,并且科幻小说类型的主键是8,那么你将为终结者添加记录< - >通过将1,3插入电影类型表中并添加终结符< - >通过在表格中插入1,8来科幻小说。
然后,您的查询将查看此表,以查找哪些类型的电影(反之亦然),并使用其他两个表格提供罗嗦信息。
答案 1 :(得分:0)
如果您不关心连接,那么最简单的选项是创建一个3列表,如下所示:
UID,GENRE,FK_Movie
使用FK_Movie显然是Movie表中行的外键。使用这种方法,您实际上可以将多个类型附加到电影中。要按流派选择电影,只需“选择”该流派并进行内部联接....
答案 2 :(得分:0)
以下是您的SQL小提琴演示:SQL Fiddle
我同意其他人的意见,也可以在W3schools上学到基础知识:W3Schooles Learn SQL
答案 3 :(得分:0)
这是一种多对多的关系。它通过查找表实现,该查找表具有CategoryID的字段和MovieID的字段。您应该获取您感兴趣的类别的ID,然后在查找表和类别=“x”的电影表上执行简单的一对多连接类型查询。 SELECT * FROM LookupTable为LT,电影为M WHERE LT.Category =“x”;
只需简单的查找即可获得CatID。这两个查询可以合并,但为了简单起见,我只在这里展示第二部分。
答案 4 :(得分:0)
创建所谓的关联或多对多表,包含两列,一列用于流派,另一列用于MovieId
Create Table MovieGenres(
Genre varchar(10),
MovieId integer Not Null,
Primary Key (Genre, MovieId)
)
现在每部电影都可以有零到多种类型,并且可以在零到多部电影中使用流派。
答案 5 :(得分:0)
如果你使用EF,你可以这样做:
public class Movie
{
[ScaffoldColumn(false)]
public int Id {get; set;}
public string Name {get; set;}
// ... other movie properties ...
public virtual Genre Genre{get; set;}
}
public class Genre
{
[ScaffoldColumn(false)]
public int Id {get; set;}
public string Name {get; set;}
// if you want to Genre has at least on Movie,
// add [Required] attribute at top of Movies property
public virtual List<Movie> Movies {get; set;} // its used as FK
}
现在在控制器中,为了获得Genre包括它的电影使用下面的代码:
public ActionResult Browse(string genre)
{
var genreModel = storeDB.Genres.Include("Movies").Single(g => g.Name == genre);
return View(genreModel);
}
我希望它可用 - &gt; Radmehr