0

我参加了 DBM/BI 证书课程(更像是速成课程),我决定开始一个独立的项目来实时实施我正在学习的所有内容。长话短说,我将分析过去 13 年中票房最高的 130 部电影的数据 (boxofficemojo.com)(使用 MySQL 服务器/工作台。)。首先,我想绘制一个模式,然后进行一些数据挖掘/可视化。以下是我到目前为止的拆分方式:

"Movies"
 Movie_ID (Primary )
 Dom_Revenue
 Int_Revenue
 OpWe_Revenue
 Budget


"Rating"
Rating_ID (P)
Rating

"Release"
Release_ID (P)
Year
Month
Day
Movie_ID (F)

"Cast"
Director_Gender (P)
Lead_Gender (P)
Director_Name
Director_Name
Movie_ID (F)

"Studio"
Studio_ID (P)
Studio_Name

到目前为止,这些是我的关系:

rating to movies - one to many ( many movies can be rated R , a movie can only have 1 rating )
release to movies - one to many ( many movies can be released on the same weekend, a movie can only be released once)
cast to movies - one to many (directors/actors can make many movies, a movie can only have one cast)
studio to movies - many to many (movies can be attached to more than one studio, a studio can make more than one movie)

我知道架构很可能不是 100% 正确,所以我应该将所有其他表中的主键作为外键包含在“电影”表中吗?我的人际关系怎么样?

提前致谢

4

2 回答 2

0

对我来说看起来不错。

我只是认为“发布”实体可能有点矫枉过正(知道同时发布了哪些电影有什么用?)所以我认为它可能只是一组电影属性。

而且你的“演员”实体也有两个导演。也许您可以将其标准化并仅保留一位导演(由于电影 1<-->N 导演,这只是添加关系的问题)

关于 FK,是的,您应该添加它们。你的人际关系看起来不错。

祝你好运。

于 2014-03-07T00:37:24.063 回答
0

这与 Leo 的第一个答案有关,但我会更具体,并添加更多观察。

首先,Release属性在功能上依赖于Movie_ID(或一般的电影),所以它不应该是一个单独的Entity.

其次,相对于第一个,您有YearMonth并且Day在您的 Release 实体中,为什么不将其设置为具有 的 Release_Date YearMonth并且Day无论如何?然后,您可以再次将您的Release属性作为Movie.

第三,关于第一个为什么不添加一个Movie_Title字段?

因此,总而言之,您可以拥有以下架构:

"Movies"
Movie_ID (Primary )
Movie_Title
Dom_Revenue
Int_Revenue
OpWe_Revenue
Budget
Release_Date

您可以轻松查询以某种方式发布的电影,Year例如:

SELECT Movie_Title, Year(Release_Date) as Release_Year
FROM Movies
WHERE Year(Release_Date) = 2011

或者你也可以通过Year(或Month)来计算它

SELECT Year(Release_Date) as Release_Year, COUNT(*) Number_of_Movies_in_a_Year
FROM Movies
GROUP BY Year(Release_Date)
ORDER BY Year(Release_Date)

第四,在您的Cast实体中,您说“导演/演员可以拍很多电影,一部电影只能有一个演员表”。但是看着你的Cast你有一个Movie属性,它是一个FK(外键)Movies,这意味着 aMovie可能有很多Cast,因为FK它总是在很多方面。除此之外,这个实体几乎违反了4NF(第四范式)。因此,最好的方法可能是在您的Cast表中进行专业化并将其与Movies表相关联,以便它具有One-to-Many关系或一个CastDirector可能有许多电影。所以,它看起来像这样:

 "Cast"
 Cast_ID (PK)
 Cast_Name
 Cast_Gender
 Cast_Type (values here could either be Director or Lead or could be simply letters like D or L)

现在您的Movies表格可以更改为:

"Movies"
Movie_ID (Primary )
Movie_Title
Dom_Revenue
Int_Revenue
OpWe_Revenue
Budget
Release_Date
Lead_ID (FK)
Cast_ID (FK)

最后,您说“电影可以附属于多个工作室,一个工作室可以制作多个电影”。Many-to-many关系通常具有bridge table创建实体之间的关系many-to-many。所以,假设您有一个Studio_Movie实体/表作为您的桥接表,那么您将拥有这样的:

"Studio_Movie"
Studio_ID (PK, FK1)
Movie_ID (PK, FK2)
于 2014-03-07T05:49:35.853 回答