大系统(约200桌)。
60,000名用户。
复杂的报告将要求我为每个报告执行多个查询,甚至那些将是具有内部查询的复杂查询以及PHP中的一些处理。
我看过一种方法,我不确定:
有一个集中的,非规范化的表,用于记录系统中可报告的任何活动。这张桌子主要是外键,因此她应该相当紧凑和快速
所以,例如(我的系统是虚拟学习管理系统),
用户注册到课程,该表存储用户ID,日期,课程ID,组织ID,活动类型(注册)。
当然,我还将这些数据存储在实际应用程序使用的规范化数据库中。
优点:易于维护的查询和代码,用于处理数据和快速检索 缺点:存在非规范化表格与真实数据库不同步的危险。
这种方法值得考虑,或者(最好是经验)是$#%#%t?
答案 0 :(得分:2)
您需要构建一个数据仓库,而不仅仅是一个非规范化表。在网上搜索有关星型模式,维度,级别,事实表的信息。或者更好的是阅读这本书Ralph Kimball's Data Warehousing Toolikit有一些用过的,比如$ 1.77 lol。这是基础数据仓库设计书 - 现实生活中的建议。
答案 1 :(得分:0)
我现在用同样的方法。
有些时候严格规范化的数据库会慢慢减慢查询速度。并且更难以查询。这是非常正确的,没有人可以否认这种情况。
一些大公司(google,twitter,facebook)开始离开关系数据库的概念。他们开始使用他们自己的数据库概念(可能是)如此多的冗余组件。但另一方面,他们的概念导致了简单,快速的查询。我认为您的方法很好,但您始终可以确保在应用程序级别检查数据库的每次更改。
最好的问候
答案 2 :(得分:0)
规范化是一个学术概念。非常有用但无用,始终坚持下去。交易是避免不一致的方法。如果它满足您对更简单,更有效的查询的需求,请使用冗余,就像您可以拥有一个而不是10个以上的表一样。