这是我第一次尝试创建数据集市/仓库,我对如何最好地设计架构感到困惑。项目背景:我最初创建了一个关系数据库,用于捕获有关客户的信息。简化的架构是这样的:
ClientTbl:
ID:PK;
FName:String;
LName:String;
ClientEDU(one to many)
ID:PK;
ClientID:FK;
SchoolName:String;
Degree:String;
GPA:String;
ClientJobs(One to many)
ID:PK;
ClientID:FK;
OrganizationName:string;
Industry:String;
StartDate:Date;
EndDate:Date;
Salary:double;
CityLocation: String;
这是一个简化的例子。实际上,我还有几张桌子可以容纳数千条记录。当我想在这些表上运行查询时,它可能非常耗时。我似乎想创建一个数据集市会有所帮助。这样,我们就可以对数据集市进行更新,这对每晚都很耗时。然后在我们的DM中查询可以快速查询的数据。我只是在如何最好地设计架构上遇到困难。我希望在数据集市中根据上面的示例表回答的示例问题是:
% of clients that attend each school in our db
% that have each degree in our db
Avg salary of client
Avg length of stay at a job
% of clients that worked in each city, that is found in the db
从我的阅读中,我知道事实表将包含所有计算值(平均工资,长度等),每个维度将包含数据(工作或教育),但我不明白它们是如何捆绑在一起的。我的事实表对每个客户都有一排吗?只有一排?
任何帮助都会很棒
感谢
答案 0 :(得分:1)
这是一个难题,因为它涉及客户的人口统计摘要。
你的工作似乎是事实。它有持续时间和工资作为衡量标准。我们知道他们是措施,因为他们有适当的单位。
鉴于工作事实,这个事实的维度是什么?
客户端
时间开始
也许您了解有关工作的其他事项(例如地理,行业)。
时间是一个时间点。这通常是一个包含日期和日期所有各种报告类别的表格:季度,周,财政期间等等。
客户是个人;人们没有特别好的维度。他们有很多自己的维度。
选择1.“雪花”架构。将客户视为一种具有很多维度的事实,包括他们自己的地理和学位以及学校和什么不是。
选择2.“人口统计”维度。这是学位课程,GPA范围,学校名称等的摘要。这实际上是正确的工作事实和客户之间的关联。工作属于人口统计类别。许多客户也属于该类别。
我的事实表会为每个客户提供一行吗?只有一排?
事实表对于与该事实的各个维度相关联的事实的每个可测量实例都有一行。
工作事实有两个衡量标准:薪水,工期和至少对维度的外键引用:开始日期和人口统计。如果您有Job的其他维度属性(如地理位置或行业),则这些属性是作业的外键。
客户人口统计将与一个或多个职位相关联。
地理或工业也是如此。
由于客户是一种特殊情况,因此一个或多个客户还会对相应的客户人口统计维行进行FK引用。
答案 1 :(得分:0)
我不认为'数据仓库'是你的神奇子弹。
你应该专注于你的结果“耗时”的原因
你问的问题根本不是特别的。有些事情令人担忧..就像你真的有一个弦乐学校的名字作为学校的主要钥匙?
或许发布一个实际的模式子集,以及一个您遇到困难的特定查询,然后您可以获得有关如何改进模式的实际帮助。