sql - 如何在客户下订单且每个订单包含多个食物的餐厅场景中设计星型模式
问题描述
在这里,我有一个 FACT 表FACT_Orders,其中包含字段customer_id、order_id、total_cost、created_date、updated_date。
此外,我还有一个 FACT 表FACT_Order_List以保持项目的顺序,其中包含字段 order_list_id、order_id、item_id
我还有维度表DIM_Item和DIM_Customer来保留 Item 和 Customer 的属性
从 FACT 表中,我需要计算最畅销的商品和最不受欢迎的商品
这个好的设计是否有两个 FACT 表并连接 FACT 表进行计算?
解决方案
假如说 :
一个项目有很多订单,一个订单包含很多项目。
您可以有如下事实记录:CustomerId=5 订购了 2 件商品
OrderId OrderListId ItemId CustomerId ItemPrice TotalCost CreatedDate
1 1 12 5 100 350 17-01-2021
1 1 15 5 250 350 17-01-2021
你不加入事实表。通过按公共维度单独汇总每组度量值,然后在这些维度上连接汇总集,从而组合事实。
您的模型可能如下所示:
在事实中重新考虑 updated_date :
事实表不应更新。事实衡量值几乎永远不应该更新有几个非常好的理由。...事实表处理:在 SQL Server 数据仓库数据库服务器上执行表更新可能是一项非常昂贵的操作!事实表可以而且应该非常大。
推荐阅读
- node.js - { "code": "ECONNECTION", "command": "CONN" } 在 nodemailer
- azure - 如何在 Azure Kubernetes 服务中进行基于角色的访问控制?
- python - 为什么这个问题发生在我的第二个列表理解的python代码中而不是第一个?
- node.js - NodeJS - 我有一个带密码的 .key 文件,我需要使用 RSA PKCS8 方法获取 .pem 文件
- javascript - React - 如何处理传递给道具的html元素?
- sql-server - 查找重复行 - 保留一个条目
- mysql - 使用 MySQL 获取 JSON 行数组
- android - Dalvik 验证器:register1 v25 类型 0,想要参考
- javascript - 在 Async/Await 中包装 FTP 请求
- python - 符号检测脚本中的缩进问题python