我注册了DBM/BI证书课程(更像是速成班),我决定开始一个独立的项目,以实现我实时学到的一切。长话短说,我将分析数据(boxofficemojo.com)的前130部电影在过去13年(使用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%正确的,所以应该将所有其他表中的主键作为外键包含在“影视”表中吗?我的关系怎么样?
提前感谢
发布于 2014-03-07 05:49:35
这与Leo的第一个答案有关,但我会说得更具体一些,并增加更多的观察。
首先,Release属性在功能上依赖于Movie_ID (或一般的电影),因此它不应该是一个单独的Entity。
第二,对于第一个版本,您的发布实体中有Year、Month和Day,为什么不将其设置为具有Year、Month和Day的Release_Date呢?然后,您可以再次将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属性,它是来自Movies的FK (外键),这意味着Movie可以有很多Cast,因为FK总是在多个方面。此外,这个实体几乎是对4NF (第四范式)的违反。因此,最好的方法可能是在Cast表中进行专门化,并将其与Movies表相关联,以便它具有One-to-Many关系,或者Cast或Director可以有很多电影。所以,看起来是这样:
"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-07 00:37:24
对我来说没问题。
我只是觉得“发布”这个实体可能有点过火了(知道什么电影同时上映有什么用?)所以我认为它可以是一组电影属性。
还有你的“演员”实体有两个董事。也许你可以正常化,只保留一个导演(因为电影1<->N导演,这只是一个增加关系的问题)。
关于FKs,是的,你应该加进去。你们的关系很好。
祝好运。
https://stackoverflow.com/questions/22238752
复制相似问题