gpt4 book ai didi

mysql - 如何正确构建架构

转载 作者:行者123 更新时间:2023-11-30 00:35:12 26 4
gpt4 key购买 nike

我参加了 DBM/BI 证书类(class)(更像是速成类(class)),我决定开始一个独立项目,以实时实现我正在学习的所有内容。长话短说,我将分析过去 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% 正确,所以我是否应该将所有其他表中的主键作为外键包含在“电影”表中?我的人际关系怎么样?

提前致谢

最佳答案

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

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

第二,与第一个相关,您的发布实体中有,为什么不将其设置为Release_Date其中有吗?然后,您可以再次将 Release 属性作为 Movie 的一部分。

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

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

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

您可以轻松查询在特定年份发行的电影,例如:

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

或者您也可以按(或按)进行计数

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 实体中,您说“导演/ Actor 可以制作很多电影,一部电影只能有一个 Actor ”。但是查看您的 Cast,您有一个 Movie 属性,它是来自 MoviesFK(外键),并且顺便说一句,Movie 可以有多个 Cast,因为 FK 始终位于多方。除此之外,这个实体几乎就像违反了 4NF (第四范式)。因此,最好的方法可能是在您的 Cast 表中进行专门化,并将其与 Movies 表相关联,以便它具有 One-to-Many 关系或 Actor 导演 可以拍摄很多电影。所以,它看起来像这样:

 "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)

最后,您说“电影可以附属于多个工作室,一个工作室可以制作多部电影”。 多对多关系通常有一个桥接表来创建实体之间的多对多关系。因此,假设您有一个 Studio_Movie 实体/表作为桥接表,那么您将拥有如下所示的内容:

"Studio_Movie"
Studio_ID (PK, FK1)
Movie_ID (PK, FK2)

关于mysql - 如何正确构建架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22238752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com