繁体   English   中英

数据库设计

[英]Database design

我正在建立一个音乐流媒体网站,用户可以在其中购买和流媒体mp3。 我有一个子集实体图,可以描述如下:

ER图

我想将数据标准化为3NF。 我需要多少张桌子? 显然,我想避免包括部分相依性,这不仅需要专辑,艺术家,歌曲,还需要更多的表,但是我不确定还需要添加什么? 经验中有什么想法吗?

好了,您已经完成了ER级别。 您需要先确定键和属性,然后才能计算出功能依赖性。 进入3NF之前,您还有很多工作要做。 例如。 歌曲标题重复。

另外,还有一些问题:

  • 该网站销售专辑,歌曲或两者兼而有之吗? (我都建模)
  • 如果同时存在,您如何跟踪销售或下载?
  • 您是否关心不同歌手录制的同一首歌标题?

无论如何,至少在提供的信息上,这是一个已解析的“ 实体关系图” 它比3NF更接近5NF,但是我不能这样声明,因为它不完整。

不熟悉关系数据库建模标准的读者可能会发现▶IDEF1X Notational◀非常有用。

它使用简单的Supertype-Subtype结构,即“正交设计原理”。 出售的商品,即专辑或歌曲。

随时提出澄清的问题。

您将需要4个表格:艺术家,歌曲,专辑和专辑歌曲。
最后一首是必需的,因为完全相同的歌曲(=相同的编辑/版本...)可以包含在几张专辑中,因此您之间存在m-m的关系。

我同意iDevelop,但有1张额外的桌子。 这是我要建模的方式。

表格:艺术家,歌曲,专辑,专辑歌曲地图,SingleInfo

如果歌曲是在其他日期作为单曲发行的,则可以从SingleInfo获得。 该单曲可能已经发行,发行时带有一些与专辑封面不同的封面。 您会将单曲作品存储在SingleInfo中。 也许一首歌可以多次发行,并带有新的封面或其他内容,因此可能是一对多的关系。 否则为1-1。

如果您可以将Song与SingleInfo结合使用,则意味着它已作为一个单独的发行。 如果您可以将Song和Album一起使用地图(使用地图),那么您将找到该专辑下发布的所有专辑。

对旧歌曲的数字增强是新歌曲。 (或至少是其他二进制文件)。 您可能需要进一步规范化Song以允许存储数字增强功能而无需复制songName等。

从ER建模切换到关系建模(表)时,每个实体都需要一个表。 您还需要一些关系表。

在您给我们的图中,两种关系都是一对多的。 多对一关系不需要表。 您可以通过将外键添加到实体表来摆脱困境。 因此,您的问题的答案是3张桌子:艺术家,专辑和歌曲。

但是 ,我质疑您的ER图。 在我看来,“包含”关系真的是很多对很多。 一张专辑显然包含许多歌曲。 但是给定的歌曲可以出现在多个专辑中。 因此,在连接“包含”与“专辑”的线上应该有一个箭头。

如果您接受此ER模型的修订,则表的数量将增加到4:艺术家,专辑,歌曲和包含。

艺术家和宋可能会提出类似的论点。 如果两个艺术家合作创作一首歌曲(例如Dolly Parton和Kenny Rogers一起演唱“ Islands in the Stream”,那么您可能希望将“农产品”建模为多对多关系。现在,您需要5张桌子:艺术家,专辑) ,歌曲,包含和产生。

艺术家,专辑和歌曲将需要一个用于标识相应实体的PK。 实体完整性要求实体实例和表行之间的对应关系是一对一的。

可以在没有单独的ID属性的情况下构建“包含”和“产生”表。 每个这些表中都需要一对FK,并且可以为由两个FK组成的每个表声明一个复合PK。

引用完整性要求您在程序中或通过在数据库中声明引用约束来强制FK引用的有效性。 我强烈希望在数据库中声明约束。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM