2015-08-14 76 views
-1

我想存储有关他们被归类歌曲文件信息:
1.体裁例如:流行,摇滚,古典等采用类似钢琴violinn等

2.仪器 3.艺术家
每首歌都有很多乐器。每首歌都有很多艺术家。
所以所有的关系都是多对多的。我怎样才能实现这个?在歌曲实体和这三个类别类型实体之间建立多对多关系是否好主意?或者我应该只有一个类别实体继承这些子类别?
在此先感谢产品具有多类别类型的数据库模式

+0

最简单的方法是使用单独的关系表。 –

回答

2

乐器和艺术家都是“有-A”关系的例子。这个流派是一个“is-a”关系的例子。 Has-a和Is-关系数据库设计中的关系建模完全不同。一首歌是流行歌曲,或者一首歌是摇滚歌曲。 (我认为一首歌既可以流行又可以摇滚,但是在你的描述中并不清楚)。

有一种关系比较常见,通常在任何好的教程中都会介绍。是 - 在这些相同的教程中,关系往往没有得到足够的覆盖。如果你想获得一些关于is-a关系的ER建模的文章,请查阅“泛化/专业化”。这将解释如何描述这些关系之一,但不解释如何设计适合的表格。

如果您熟悉对象建模,那么您最容易理解的概念就是所谓的类/子类模式,即类型/子类型。这很简单,但它依赖于对继承的支持。这种支持通常存在于任何对象系统中,并为您完成大部分艰苦的工作。如果你正在设计一个关系型数据库,你就会面临这样一个事实:关系模型不直接支持继承。这意味着您必须设计模仿继承的好处的表格,除非您愿意使用您的SQL方言中提供的SQL扩展。

两个比较标准的设计是由这两个标记的名字称为:

您可以通过读取这些标签的信息标签上找到的简要说明。您可以通过查看Martin Fowler对这两种模式的处理来得到更好的描述。

单表解决方案将帮助您为所有歌曲文件创建单个表格,列表适用于任何或所有类别的列。

班表解决方案将帮助您为歌曲文件设计一个表格,并为每个流派设计一个表格。如果您使用共享主键技术,并因此导致流派表中的每个条目从歌曲文件表中的相应条目“继承”其ID,这将会很有帮助。当你插入一个新的歌曲文件时,你必须通过额外的编程来完成这个继承。

哪一个更好?这取决于你的情况。你决定。

+0

感谢您的完整答案^ _ ^它帮助了很多 –

相关问题