Database design 维度设计:不确定特定类型数据的事实与维度

Database design 维度设计:不确定特定类型数据的事实与维度,database-design,star-schema,dimensional-modeling,fact-table,Database Design,Star Schema,Dimensional Modeling,Fact Table,对于我正在开发的星型模式,我很难决定什么应该放在特定维度中,什么应该放在事实表中 例如,假设该项目正在为一家物业管理公司跟踪房屋。不同的日期、租客、合同等维度都相当简单。对于房屋,无论数据位于何处,我们都希望跟踪当前的所有者、当前的承租人、当前的租赁合同,以及邻居、地址、当前的租赁价格、当前的市场价值等信息。请注意,所有者、承租人和合同本身就是维度(邻里和地址也可能是维度,但我不太关心这些) 关于房屋的大量数据将用于过滤查询,或用于多维数据集的行标题和列标题。其中一些信息只需要作为辅助信息,逐户

对于我正在开发的星型模式,我很难决定什么应该放在特定维度中,什么应该放在事实表中

例如,假设该项目正在为一家物业管理公司跟踪房屋。不同的日期、租客、合同等维度都相当简单。对于房屋,无论数据位于何处,我们都希望跟踪当前的所有者、当前的承租人、当前的租赁合同,以及邻居、地址、当前的租赁价格、当前的市场价值等信息。请注意,所有者、承租人和合同本身就是维度(邻里和地址也可能是维度,但我不太关心这些)

关于房屋的大量数据将用于过滤查询,或用于多维数据集的行标题和列标题。其中一些信息只需要作为辅助信息,逐户查看,而不是汇总

考虑到数据以及我需要做的事情,我(至少)有三个选择:

  • DimHouse:house表是一个维度,有很多属性在事实表中看起来可能更好,但因为它们用于浏览和筛选,所以它们需要在这里。对于当前租户等属性,将需要防雪/支腿
  • FactHouse:拥有一个房屋信息的累积快照,并将其连接到其他事实表中,可能使用一个修剪过的DimHouse作为桥梁。这对我来说似乎很奇怪,但它将看似事实的东西放在事实表中。
    • 将当前所有者、当前承租人等放在相关事实表中,然后在所有者/承租人等发生变化时保持这些事实的最新状态(这也很奇怪,但会让我们留在星型模式的土地上)

所以我一直在走维度路线。这让我有些心痛,但它实现了目标。我只是想知道是否有更好的方法来组织数据。我不介意冗余(比如拥有一个事实表和一个具有类似数据的维度表)或雪花剥落,如果它们有意义并且是做事情的最佳方式(对于“最佳”值而言)。

星型模式的一点是,它是专门为使某些类型的查询变得简单高效而构建的

如果您发现由于什么是维度和什么是事实,某些类型的查询没有得到star的帮助,那么您可以围绕维度和事实的备选视图构建额外的star,这些视图将更容易支持您想要执行的查询


保持事务数据库的规范化。当涉及到BI数据仓库时,您需要消除冗余焦虑,以避免心脏灼伤。

星型模式的一点是,它是专门为使某些类型的查询变得简单高效而构建的

如果您发现由于什么是维度和什么是事实,某些类型的查询没有得到star的帮助,那么您可以围绕维度和事实的备选视图构建额外的star,这些视图将更容易支持您想要执行的查询


保持事务数据库的规范化。当涉及到BI数据仓库时,您需要消除冗余焦虑,以避免心痛。

冗余并不是让我心痛的原因。让我心痛的是我(作为数据仓库世界中的n00b)无法设计一组事实和维度表来实现跟踪和测量房屋相关数据的目标。你认为你能说得更多吗,也就是说,在你的中间段更具体一些?@siride-如果你不知道为什么你发现你目前的星型模式有缺陷,就很难提出具体的建议。将维度分组为“更高级别”维度绝对没有什么特别的错误,例如将房屋划分为街区,尽管许多人将所有这些都非规范化,以使自动化多维数据集/透视工具更易于使用。你能举一个你现在的明星不太支持的查询的例子吗?这是一个设计问题。问题在于首先将数据放在何处,而不是如何修复损坏/低效的查询。听起来你是在鼓吹对房屋尺寸进行降雪处理。我只是想确保这是我能做的最好的前期设计。@siride-雪花剥落是一个选项,另一个选项是将雪花变平,使之成为星星。这使得某些类型的操作更容易(旋转),而某些类型的操作更难(钻孔/滚动)。另一个选择是创造一颗全新的恒星,它重复一切,但根据不同的维度和事实进行重组。最后一个解决了如何查看某些数据的问题,这些数据有时希望成为维度,有时则希望成为事实。让我心痛的是我(作为数据仓库世界中的n00b)无法设计一组事实和维度表来实现跟踪和测量房屋相关数据的目标。你认为你能说得更多吗,也就是说,在你的中间段更具体一些?@siride-如果你不知道为什么你发现你目前的星型模式有缺陷,就很难提出具体的建议。将维度分组为“更高级别”维度绝对没有什么特别的错误,例如将房屋划分为街区,尽管许多人将所有这些都非规范化,以使自动化多维数据集/透视工具更易于使用。你能举一个你现在的明星不太支持的查询的例子吗?这是一个设计问题。问题在于首先将数据放在何处,而不是如何修复损坏/低效的查询。听起来你是在鼓吹对房屋尺寸进行降雪处理。“我只是想确保这是我能做的最好的前期设计。”先生