Mysql 数据库结构-加入或不加入

Mysql 数据库结构-加入或不加入,mysql,database-design,data-structures,relational-database,database-relations,Mysql,Database Design,Data Structures,Relational Database,Database Relations,我们正在mySQL Workbench的帮助下为一个新的应用程序绘制数据库结构,并且随着多对多关系的增加,创建数据列表所需的连接数量急剧增加 该应用程序的读取量相当大,每个表有几十万行 问题是: 在需要的地方合并表从而减少连接,真的那么糟糕吗 我们应该开始研究水平分区吗?(与合并表一起使用) 有没有比透视表更好的方法来处理多对多关系 我们讨论了将所有数据存储在序列化文本列中,并让应用程序进行排序而不是数据库,但这似乎是一个非常糟糕的主意,即使数据库将被大量缓存。你觉得怎么样 一如既往,这取决于

我们正在mySQL Workbench的帮助下为一个新的应用程序绘制数据库结构,并且随着多对多关系的增加,创建数据列表所需的连接数量急剧增加

该应用程序的读取量相当大,每个表有几十万行

问题是:

  • 在需要的地方合并表从而减少连接,真的那么糟糕吗

  • 我们应该开始研究水平分区吗?(与合并表一起使用)

  • 有没有比透视表更好的方法来处理多对多关系

  • 我们讨论了将所有数据存储在序列化文本列中,并让应用程序进行排序而不是数据库,但这似乎是一个非常糟糕的主意,即使数据库将被大量缓存。你觉得怎么样


一如既往,这取决于您的应用程序,但一般来说,过多的非规范化可能会在以后影响您。一个规范化的数据库意味着您应该能够以以后可能需要的大多数方式查询数据,特别是在报告时(这通常是事后考虑的)

如果您将所有数据粘贴在序列化文本列中,并且您的客户机要求提供一个显示具有特定属性的所有行的报告,那么您将不得不执行一系列字符串操作来获取这些数据

如果您担心查询的连接太多,您可以考虑将某些数据集作为视图…

< P>按逆顺序:

  • 算了吧。使用数据库。说“在应用程序中实现”的人往往对编写数据库的工作量一无所知

  • 取决于确切的需要

  • 取决于确切的需要。OLTP(事务处理)-选择firth标准格式。OLAP(分析处理)-寻找合适的星图并进行反规范化以获得最佳性能。混合-算了吧。不适用于较大的安装,因为理论不同。。。除非您使用OLTP数据库,然后使用特殊的OLAP多维数据集数据库(mySQL没有)


使用数据库的规范化形式。对于大多数任务,您不需要超过3或4个联接,并且仍然可以为最常见的联接编写视图。非规范化将使您在更改一个属性时始终考虑更新多个位置/表中的字段,这肯定会导致更多的问题而不是好处


如果您担心报告性能,那么仍然可以将定时批处理的数据提取到单独的表中,以获得报告查询所需的性能。如果为了简化查询,您可以使用视图。

数据库设计用于处理大量连接。使用此功能,因为它将使数据库中的多种数据操作更加容易。否则,为什么不使用平面文件呢

除非您有明确证据表明连接导致性能下降,否则请保持正常。否则,正如其他人所说,您将不得不担心多个更新

特别是当数据库被大量缓存时,正如您所说,您会惊讶于DBMS在做这类事情时有多快——毕竟这是它的设计目的

除非是那种需要特殊性能优化的具有大量数据的怪物应用程序,否则您会发现,减少开发、测试和后续维护工作将更加重要

连接通常是好的,不是坏的。它们允许您将数据保存在应该保存的位置,这为您提供了最大的灵活性


正如已经说过很多次的那样,过早的优化通常是不好的,而不是好的。

如果您确保索引外键(您确实设置了外键,不是吗?),并且在查询中有适当的where子句,10-15个连接应该可以很容易地由数据库处理。尤其是排得这么少。我在有数百万行的表上有这么多连接的查询,它们运行得很好

通常,对数据进行分区比反规范化更好

就去规范化而言,除非您还制定了一种策略来保持去规范化数据与父表同步,否则不要这样做


至于您是否真的需要那么多表,或者您的设计是否糟糕,那么我们唯一可以对此进行评论的方法就是查看表结构

谢谢!实际上,我们已经在8-9个连接的范围内了,而且核心肯定会增加,所以10-15个连接在将来可能不是完全不可能的。开始吧。定义您的性能要求。量。如果你没有表现出来,就从战略上取消标准化,直到你满足你的要求。我总是被告知要标准化,标准化,然后再标准化。然后连接的数量会增加,我被告知这会立即降低性能。当数据集增长时,过多的连接会降低性能。显然,数据库除了能够进行连接之外还有许多其他优势。@Kimble:当然取决于应用程序,但“连接太多”的界限在哪里?@Industrial:我认为这个问题没有确切的答案。这在很大程度上取决于联接中包含的表中的数据量。Digg.com已经发表了很多关于他们在这方面经历的文章/博客。@Kimble谢谢!将查看他们的博客了解更多信息。让我知道,如果你有任何具体的文章在脑海中!好吧,我们不是在构建新的Facetube,但我们真的不想一开始就构建一个从第一天起就会受到糟糕结构影响的应用程序。您对何时合并表并将它们彼此分离有何看法?@Industrial-通常在您有明确证据证明需要时才进行非规范化。其他