首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据库设计中的多对多关系

数据库设计中的多对多关系
EN

Stack Overflow用户
提问于 2009-08-13 18:21:04
回答 5查看 21.5K关注 0票数 7

我目前有一个包含两个表的数据库,分别称为文章和标签。为了允许文章在多个类别中,我有一个多对多的关系。就性能而言,这样的设计是错误的吗?或者我应该删除这两个表之间的关系,并添加第三个表作为桥(articlesTags)?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-08-13 18:27:51

多对多关系本身并没有什么错,您只需要创建一个Junction Table (这听起来就像您在articlesTags中所指的那样)来促进这种关系。

票数 18
EN

Stack Overflow用户

发布于 2009-08-13 18:53:02

您可以看到概念数据库设计( N:N关系)和物理实现之间的区别。无论您如何建模您的N:N关系,您都需要前面提到的连接表才能使其工作。

将真实世界的关系建模为尽可能接近真实世界的一般陈述并没有错。清晰是王道。

当涉及到任何系统中的任何性能问题时,答案通常归结为“视情况而定”。

如果您的性能问题与写入有关,那么高度标准化的结构是最好的,并且您将需要连接表。您最终将写入更少的数据,这可以大大提高速度(尽管您可能会在创建插入之前进行查找来消耗这种优势)。从单独的规格化表中读取数据也可以非常快。

如果你的问题与分析阅读有关,那么非正规化的结构是最好的。如果表很大且索引分散,则连接可能会占用大量性能。你将牺牲大量的空间来赢得大量的时间。

通常,在决定解决方案之前,您需要查看您的具体情况,并权衡每种方法的优缺点。就我个人而言,我总是发现在最初阶段专注于清晰度,并在以后发现问题时重构性能会更好。

票数 7
EN

Stack Overflow用户

发布于 2009-08-13 18:28:04

多对多关系存在于关系模型中,它只是思维的抽象。当您要实现它时,将会有一个articles_to_tags表,您将在其中拥有:

Fk_article(整数)fk_tag(整数)

cf http://en.wikipedia.org/wiki/Many-to-many_(data_model)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1273715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档