mysql - 数据库或数据仓库中的事实表和暗表?
问题描述
我正在为接收事务性用户数据的数据库设计架构,目标是存储数据,对其进行转换,然后在仪表板上以图形的形式将其显示给用户。
我的理解是,我们对数据进行规范化以优化数据库中的存储,并将数据仓库中数据库中的数据非规范化为可用于数据可视化/分析的格式。
在网上,我看到 Fact 和 Dim 表属于数据仓库,但由于我的数据性质,我目前将它们放在我的数据库中。我的理解错了吗?我认为数据仓库连接了数据库中的 Fact 和 Dim 表并聚合或执行其他计算以进行分析?
我是数据库设计的新手,因此我们将不胜感激任何指导!
解决方案
是的,将数据存储在“数据仓库”中以供以后绘图是很好的。
是的,“规范化”(进入“暗淡”表)很好,但它可能做得过头了。例如,不要规范化 DATE 或 DATETIME;弊大于利。
典型的“事实”表需要很少的索引,可能只是一个PRIMARY KEY
.
通常,需要汇总事实表中使用的数据。然后甚至可能会发生图形 - 绘制一百万个点是没有用的。您可以将其归结为一千,这样您就不会阻塞图形软件。
应建立“汇总表”,然后逐步(或持续)维护。通常,汇总表包含事实表切片的每日计数和小计。(“聚合”)然后图表的“报告”或提取对汇总表起作用。除了比 Fact 表少得多的行之外,此类表还具有使查询高效的索引。
更多讨论: http: //mysql.rjweb.org/doc.php/datawarehouse (以及 3 篇相关文章)。
为了进一步讨论,让我们看看CREATE TABLE
您的事实表和您需要的图表之一的尝试。
推荐阅读
- python - FileNotFoundError: [Errno 2] No such file or directory: 'frame0.png' 但实际上有
- python - 如果存在于另一个数组中,则从一个数组中删除元素,保留重复项 - NumPy / Python
- jquery - 防止调用 jquery 选项卡的“显示”事件
- c# - 'await' 运算符只能在异步方法中使用 [MySQL 连接器]
- html - MVC foreach 循环样式
- three.js - 无法读取 FBXLoader.load 处未定义的属性“extractUrlBase”
- compiler-construction - 符号表存储在哪里?
- android - WorkManager 工作状态未按标签查看排队作业
- android - 如何使用 Gson 解析具有相同 json 键的 JSONArray 和 JSONObject?
- swift - 在非类绑定协议的扩展中,实例必须被视为值类型