我目前有一个数据库,其中有两个表称为文章和标签。为了让文章分为多个类别,我有多对多的关系。在性能方面有这样的设计是错误的吗?或者我应该删除这两个表之间的关系,并添加第三个表作为桥梁(articlesTags)?数据库设计中的多对多关系
6
A
回答
15
拥有多对多关系本身并没有什么错误,您只需要创建一个Junction Table(这听起来就像您指的是articlesTags
)以促进这种关系。
1
4
关系模型中存在多对多的关系,它只是一个抽象的思维。 当你实现它会有一个articles_to_tags表,你将有:
fk_article(整数) fk_tag(整数)
2
有使用许多没问题许多关系。它通常是必需的。
是的,无法使用第三个表创建多对多关系。
6
您将看到概念数据库设计(N:N关系)与物理实现之间的区别。不管你如何模拟你的N:N关系,你都需要上述的连接表来使它工作。
将真实世界的关系模拟为与真实世界接近的一般性陈述并没有错。清晰是国王。
当谈到任何系统中的任何性能问题时,答案通常归结为“取决于”。
如果你的性能问题与WRITES相关,那么高度的NORMALIZED结构是最好的,你会需要该Junction表。你最终会写更少的数据,并且可以大幅度提高速度(尽管你可能会在创建插入之前先进行查找来消化这些优势)。从各个标准化表中读取也可以非常快。
如果您的问题与分析性阅读有关,那么DENORMALISED结构是最好的。如果表格很大并且索引展开,连接可能会非常耗费性能。你会牺牲很多空间来获得很多时间。
一般来说,在决定解决方案之前,您需要查看自己的具体情况并权衡每种方法的优缺点。就个人而言,如果我稍后发现问题,我总是发现在初始阶段专注于清晰度并重构性能会更好。
相关问题
- 1. 如何设计对象数据库中的多对多关系?
- 2. 数据库设计采用多很多一对多的关系
- 3. 如何区分设计数据库时的多对多关系?
- 4. 多对多关系的数据库设计
- 5. 用户,UserRole的数据库设计 - 多对多关系
- 6. 数据库设计:责令很多一对多的关系
- 7. 子列或多对多关系的数据库设计
- 8. 数据库设计:递归多对多关系
- 9. 关系数据库设计(正火许多一对多映射)
- 10. 数据库中的一对多关系 - 设计概念
- 11. 关系数据库一对多关系
- 12. 数据库设计 - 定义基本的多对一关系
- 13. 有关多个一对多关系和外键的数据库设计问题
- 14. 数据库多对多关系
- 15. 数据库关系多对多
- 16. 关系数据库,多对多
- 17. 以一对多关系设计数据库
- 18. 数据库设计:简化多对多
- 19. “多对多”关系的同义词(关系数据库)
- 20. 替代使用关系数据库中简单数据的多对多关系
- 21. SQL多对多关系设计
- 22. 数据库设计中的多重关系问题
- 23. 数据库设计1对1关系
- 24. 为SQLAlchemy多对多数据库设置关系/映射
- 25. 一对多数据库表的关系
- 26. 关系数据库设计
- 27. 如何设计一个通知系统表的一对多数据库关系?
- 28. 一对多数据库关系
- 29. 具有多个关系的数据库设计表
- 30. 具有多人关系的数据库设计
如何在不使用articlesTags表的情况下创建多对多关系? – flayto 2009-08-13 18:24:20
如果你有多对多的关系,你需要第三张表格来代表 - 没有明智的选择。如果你的数据库管理系统支持,你最近的方法可能是每个表中的SET结构。但是对于这种类型,通常没有太多的表间检查 - 单独的表是必要的。 – 2009-08-13 19:14:22