我目前有一个包含两个表的数据库,分别称为文章和标签。为了允许文章在多个类别中,我有一个多对多的关系。就性能而言,这样的设计是错误的吗?或者我应该删除这两个表之间的关系,并添加第三个表作为桥(articlesTags)?
发布于 2009-08-13 10:27:51
多对多关系本身并没有什么错,您只需要创建一个Junction Table (这听起来就像您在articlesTags
中所指的那样)来促进这种关系。
发布于 2009-08-13 10:53:02
您可以看到概念数据库设计( N:N关系)和物理实现之间的区别。无论您如何建模您的N:N关系,您都需要前面提到的连接表才能使其工作。
将真实世界的关系建模为尽可能接近真实世界的一般陈述并没有错。清晰是王道。
当涉及到任何系统中的任何性能问题时,答案通常归结为“视情况而定”。
如果您的性能问题与写入有关,那么高度标准化的结构是最好的,并且您将需要连接表。您最终将写入更少的数据,这可以大大提高速度(尽管您可能会在创建插入之前进行查找来消耗这种优势)。从单独的规格化表中读取数据也可以非常快。
如果你的问题与分析阅读有关,那么非正规化的结构是最好的。如果表很大且索引分散,则连接可能会占用大量性能。你将牺牲大量的空间来赢得大量的时间。
通常,在决定解决方案之前,您需要查看您的具体情况,并权衡每种方法的优缺点。就我个人而言,我总是发现在最初阶段专注于清晰度,并在以后发现问题时重构性能会更好。
发布于 2009-08-13 10:28:04
多对多关系存在于关系模型中,它只是思维的抽象。当您要实现它时,将会有一个articles_to_tags表,您将在其中拥有:
Fk_article(整数)fk_tag(整数)
https://stackoverflow.com/questions/1273715
复制