为了保证连接后汇总结算的完整准确,需尽量使用一对多的连接关系,汇总时使用一表字段作为维度字段,所以正确答案是A、C。
### 正确答案:**A、C**
(选择 A "一表出维度" 和 C "一对多的连接关系")
---
### 题目解析
**题目背景:**
连接汇总是计算业务指标的核心操作(如计算销售额、用户留存率等)。为保障计算准确性和效率,需遵循数据建模的最佳实践。 实际工作一般遵循"一表出维度,多表出度量"
#### 逐项解析:
1. **A. 一表出维度(遵守)** ✅
- **为什么?**
每个业务实体(如产品、时间、客户)应有**唯一的维度表**存储其所有属性(如产品名称、日期、客户等级)。
- **作用:**
- 避免歧义:例如"产品分类"仅从 `dim_product` 获取,不会与其他表冲突
- 简化分析:BI工具中拖拽维度时无需担心来源混乱
- **反例风险:**
若产品名称同时存在于订单表和库存表,计算"手机类目销售额"时可能因数据源不同导致结果偏差
2. **B. 一表出度量(不应遵守)** ❌
- **为什么?**
度量值(如销售额、库存量)需**按业务过程拆分到不同事实表**:
- 销售指标 → `fact_sales`
- 库存指标 → `fact_stock`
- **关键原因:**
- 业务隔离性:不同过程指标合并会导致数据冗余(如订单和库存混合)
- 粒度保障:避免订单级度量(如销售额)和日志级度量(如点击量)错误关联
3. **C. 一对多的连接关系(遵守)** ✅
- **为什么?**
连接必须是 **维度表(1)→ 事实表(多)**(如 `dim_product` → `fact_orders`)
- **核心价值:**
- 防数据膨胀:避免笛卡尔积(如1个产品对应100个订单,连接后仍是100行)
- 保聚合准确:`SUM(销售额)` 不会因重复关联而翻倍
- **反例演示:**
若产品表错误连接多份订单数据,100元销售额可能被计算为200元
4. **D. 多对多的连接关系(禁止遵守)** ❌
- **为什么?**
直接多对多连接(如 `fact_sales ↔ fact_stock`)会导致:
- **数据灾难**:订单和库存组合爆炸(100订单 × 50库存 = 5,000冗余行)
- **计算错误**:`SUM(销售量)` 因重复关联严重虚高
- **替代方案:**
需通过桥接表或预先聚合解决,但**连接汇总中必须避免**
---
> **行业依据**:此解析基于数据仓库黄金标准——Kimball维度建模理论,是阿里/腾讯等企业数仓建设的核心规范。