3

场景:

大系统(约 200 个表)。
60,000 名用户。
复杂的报告需要我为每个报告执行多个查询,甚至那些将是复杂的查询,内部查询遍布整个地方 + 一些 PHP 处理。

该方法:

我见过一种方法,但我不确定:
有一个集中的、非规范化的表,用于记录系统中任何可报告的活动。该表将主要保存外键,因此她应该相当紧凑和快速。
因此,例如(我的系统是一个虚拟学习管理系统),一个用户注册课程,表中存储了用户id、日期、课程id、组织id、活动类型(注册)。
当然,我还将这些数据存储在实际应用程序使用的规范化数据库中。

优点:用于处理数据和快速检索的简单、可维护的查询和代码。
缺点:非规范化表存在与真实数据库不同步的危险。

这种方法是否值得考虑,或者(最好根据经验)总计 $#%#%t?

4

3 回答 3

2

您需要构建一个数据仓库,而不仅仅是一个非规范化的表。在网络上搜索有关星型模式、维度、级别、事实表的信息。或者更好的是阅读这本书Ralph Kimball 的数据仓库工具包 有一些二手的,价格为 1.77 美元,哈哈。这是基本的数据仓库设计书籍——现实生活中的建议。

于 2010-06-18T02:15:04.260 回答
0

我现在对你使用同样的方法。

有时严格规范化的数据库会大大降低查询速度。而且也更难查询。这是非常真实的,没有人可以否认这个条件。

一些大公司(google、twitter、facebook)开始离开关系数据库的概念。他们开始使用自己的数据库概念,其中包含(可能)如此多的冗余组件。但另一方面,他们的概念带来了简单且非常快速的查询。

我认为您的方法很好,同时您始终可以确保数据库的每次更改也会在应用程序级别进行检查。

此致

于 2010-06-18T03:20:41.967 回答
0

规范化是一个学术概念。非常有用,但一直坚持下去也没用。事务是避免不一致的方法。如果它满足您对更简单、更高效查询的需求,请利用冗余,例如您可以拥有一个而不是 10 多个表。

于 2010-06-18T11:29:20.600 回答