创建一个电影数据库,我不喜欢给每个演员/女演员以及每个标签自己的行,就好像总共有1000万个moives,每个都有至少20-30个人,我们将有200个 - 表中有3亿行。
对于每部电影可以无限制的标签,它变得更加复杂。那么如何最好地存储这3个项目?理想情况下,这些可以被建模为多对多,但仍然会有数亿行。有关存储这些的更好的建议吗?我正在使用MySQL。
我会将它全部转储到文本文件中,但我需要在电影之间链接演员并进行一些分析,并允许用户评价演员按标签等查找电影,因此需要使用数据库。
答案 0 :(得分:2)
1000万部电影看起来非常雄心勃勃。 IMDb's current statistics表明他们的头衔不到180万,人数约为390万。
话虽如此,我认为创建一个标题表,一个演员表和一个联结表来解决两者之间的多对多关系没有问题。标签也是如此。
答案 1 :(得分:0)
你厌恶数百万行的原因是什么?感知性能问题?
它将在某处拥有数以亿计的关系。你必须捕捉演员和电影之间的映射,正如你所说,其中有2亿至3亿(虽然我不相信有1000万部电影存在?)
如果你真的想要,你可以(例如)将电影演员的ids打包成多列(或一列),但这样会使搜索变得不愉快。
答案 2 :(得分:0)
这听起来可能有点premature optimization。您可以将所有参与者非规范化为电影表格中的某种TEXT
列,但您的效果+搜索会受到影响,并且会失去关系数据的所有好处。
建议保持规范化架构,正如您最初的想法:
Movie (ID)
Actor (ID)
Tag (ID) --horror, comedy, etc.
MovieActor (MovieID, ActorID)
MovieTag (MovieID, TagID)
MovieActor
和MovieTag
。无论电影数量多少,或数据是否为DNA序列:实施设计,测试,根据您的要求判断其性能(用户接受度,SLA等)
答案 3 :(得分:0)
1000万部电影,每部20到30名演员(尽管这个数字听起来比现实生活更高)总会带来2亿到3亿的联想。如果您将数据存储在关系数据库中,则每个关联自然会是将电影链接到actor的表中的一行。每一行都会很小(两列 - 电影PK和演员PK;可能是一个额外的代理键列);大部分数据将存储在电影和演员表中。
任何其他解决方案(在SQL数据库中)都会以不太理想的格式存储相同数量的数据。