我想存储有关他们被归类歌曲文件信息:
1.体裁例如:流行,摇滚,古典等采用类似钢琴violinn等
2.仪器 3.艺术家
每首歌都有很多乐器。每首歌都有很多艺术家。
所以所有的关系都是多对多的。我怎样才能实现这个?在歌曲实体和这三个类别类型实体之间建立多对多关系是否好主意?或者我应该只有一个类别实体继承这些子类别?
在此先感谢产品具有多类别类型的数据库模式
回答
乐器和艺术家都是“有-A”关系的例子。这个流派是一个“is-a”关系的例子。 Has-a和Is-关系数据库设计中的关系建模完全不同。一首歌是流行歌曲,或者一首歌是摇滚歌曲。 (我认为一首歌既可以流行又可以摇滚,但是在你的描述中并不清楚)。
有一种关系比较常见,通常在任何好的教程中都会介绍。是 - 在这些相同的教程中,关系往往没有得到足够的覆盖。如果你想获得一些关于is-a关系的ER建模的文章,请查阅“泛化/专业化”。这将解释如何描述这些关系之一,但不解释如何设计适合的表格。
如果您熟悉对象建模,那么您最容易理解的概念就是所谓的类/子类模式,即类型/子类型。这很简单,但它依赖于对继承的支持。这种支持通常存在于任何对象系统中,并为您完成大部分艰苦的工作。如果你正在设计一个关系型数据库,你就会面临这样一个事实:关系模型不直接支持继承。这意味着您必须设计模仿继承的好处的表格,除非您愿意使用您的SQL方言中提供的SQL扩展。
两个比较标准的设计是由这两个标记的名字称为: single-table-inheritance class-table-inheritance
您可以通过读取这些标签的信息标签上找到的简要说明。您可以通过查看Martin Fowler对这两种模式的处理来得到更好的描述。
单表解决方案将帮助您为所有歌曲文件创建单个表格,列表适用于任何或所有类别的列。
班表解决方案将帮助您为歌曲文件设计一个表格,并为每个流派设计一个表格。如果您使用共享主键技术,并因此导致流派表中的每个条目从歌曲文件表中的相应条目“继承”其ID,这将会很有帮助。当你插入一个新的歌曲文件时,你必须通过额外的编程来完成这个继承。
哪一个更好?这取决于你的情况。你决定。
感谢您的完整答案^ _ ^它帮助了很多 –
- 1. 具有类别,子类别和产品的数据库架构
- 2. 多种类别/产品关系的数据库模式
- 3. SQL:具有多个类别的产品
- 4. 数据库建模:具有一个或多个类别的产品
- 5. 产品类别的树结构化数据库模式
- 6. 数据库设计的产品具有多个类别和多个子功能
- 7. 的MySQL:SQL和数据库产品有多个类别
- 8. 数据库设计 - 具有属性的多类产品
- 9. 按类别查询数据库产品
- 10. 为具有多种数据类型的模型设计数据库模式
- 11. 不同类型产品的数据库
- 12. Prestashop - 更改产品数据库中的产品类别
- 13. 获取仅子类别具有产品的类别的类别计数
- 14. “产品类别”是否与“产品”具有识别关系?
- 15. 数据库模式多个类别
- 16. 多色产品数据库模式
- 17. 产品分类数据库
- 18. 向具有实体表的数据库添加产品CSV数据:基于CategoryName列的产品和类别
- 19. 相关类别和具有产品计数的子类
- 20. Magento:没有指定类别的产品的查询数据库
- 21. 多种产品类型的数据库设计
- 22. 当产品有多个类别时,获取主要父级产品类别
- 23. 有很多产品类别的电子商务网站的数据库设计
- 24. 如何设计数据库,所有产品类型的表格或每种产品类型的每个表格?
- 25. 如何为具有多种内容类型的类别设计数据库模式?
- 26. woocommerce产品有多个类别,活动类别在侧边栏
- 27. Wordpress Woocommerce根据类别分类产品
- 28. 类型产品
- 29. CakePHP树行为 - 产品具有多个类别
- 30. 数据库中的Woocommerce产品类别数存储在哪里?
最简单的方法是使用单独的关系表。 –