我对数据库建模完全陌生(除了一些很久以前的学术知识),但是对于我的新项目,我想为下面的应用程序构建一个数据库。
我从不同产品类别的不同公司收集不同的收入数字。我计算了这些数字的总和,并计算了一些指标,例如这些年的平均数和这些公司的产品类别和部门的增长。我想要建立一个数据库来完成这一点,并已经做了以下的草案。它是基于一个简单的恒星模型,但我想得到你的意见,什么可以更好。
期待您的投入!

发布于 2020-12-07 20:38:33
我想听听你对什么能更好的意见。
如果不了解业务上下文和它打算回答的问题类型,就无法判断多维数据模型的设计。
因此,列出您想要从数据模型中回答的问题,为每种类型的问题提供一个具体的示例。
将每个问题转换为针对模型的SQL查询。
该设计很好,因为SQL查询对于人编写和理解以及RDBMS的执行来说都是简单的。
发布于 2020-12-08 13:02:47
嗯,在我看来,这不太像简单星图。无论如何,您可能首先决定是设计分析系统(OLAP)还是事务性系统(OLTP)。如果您正在构建一个分析/报告DB,那么决定什么(在哪里,以及如何)提供数据完整性。
在图表中,可以在公司的语句中插入一行,这些语句涉及来自该公司不从事业务的部门的产品。对事务性DB不好。对于OLAP系统来说,完整性由单独的ETL进程处理,数据来自事务系统。
对于星型模式,我会提出一个包含四个维度(公司、产品、部门、时间)的事实陈述--所有的FKs都是从事实到维度。
对于OLTP类型DB (基于图表),如下所示:
-- Industry sector SEC exists.
--
sector {SEC}
PK {SEC}-- Product type PTY is made by companies
-- in industry sector SEC.
--
product_type {PTY, SEC}
PK {PTY}
SK {PTY, SEC}
FK {SEC} REFERENCES sector {SEC}-- Company CMP operates in industry sector SEC.
--
company {CMP, SEC}
PK {CMP}
SK {CMP, SEC}
FK {SEC} REFERENCES sector {SEC}-- Time period TIM exists.
--
time_dim {TIM}
PK {TIM}-- Company CMP, from industry sector SEC,
-- issued a statement about product type
-- PTY (from that sector), for period TIM.
--
statement {CMP, SEC, PTY, TIM}
PK {CMP, PTY, TIM}
FK1 {CMP, SEC} REFERENCES company {CMP, SEC}
FK2 {PTY, SEC} REFERENCES product_type {PTY, SEC}
FK3 {TIM} REFERENCES time_dim {TIM}注意:
All attributes (columns) NOT NULL
PK = Primary Key
SK = Proper Superkey (Unique)
FK = Foreign Key顺便说一句,只有当你已经开始探索如何自动用语言表达图表的时候,ERD才是很棒的。如果还没有,那么使用纯文本编辑器,它比ERD更好、更强大。
https://dba.stackexchange.com/questions/281065
复制相似问题