Sql 我应该创建一个无事实的事实表还是对我的表进行非规范化

Sql 我应该创建一个无事实的事实表还是对我的表进行非规范化,sql,dimensional-modeling,Sql,Dimensional Modeling,我正在从一个商店数据库创建一个数据仓库,我有一个关于我的维度和事实设计的问题 在存储数据库中,存在一个用于Person、Person\u Address和Person\u Address\u Type的表。它们由另一个表名实体\地址\ ID链接,该实体\地址\ ID通过主键链接三个表,以提供有关个人地址和地址类型的详细信息 我的问题是,我应该为所有三个表创建一个维度,并创建一个无事实的事实表来将它们链接在一起,还是应该对维度进行非标准化,并为每个维度添加一个外键,用于链接它们的地址和地址类型 下

我正在从一个商店数据库创建一个数据仓库,我有一个关于我的维度和事实设计的问题

在存储数据库中,存在一个用于Person、Person\u Address和Person\u Address\u Type的表。它们由另一个表名实体\地址\ ID链接,该实体\地址\ ID通过主键链接三个表,以提供有关个人地址和地址类型的详细信息

我的问题是,我应该为所有三个表创建一个维度,并创建一个无事实的事实表来将它们链接在一起,还是应该对维度进行非标准化,并为每个维度添加一个外键,用于链接它们的地址和地址类型

下面是一个非常快速的UML,它描述了当前数据库的外观,以提供澄清

您应该创建一个带有一组地址属性(邮寄地址、账单地址等)的Person维度,也就是说,将所有这些数据反规范化并将其加载到单个表中

这似乎更像是一个问题,或者可能。这是因为它的概念性质吗?我认为尺寸建模标签是合适的,也许?差不多。我不认为这是离题的;我只是怀疑你可能会在其他SE站点中得到更好的答案。谢谢你的建议,我也把它放在了DBA SE站点上,请不要在不同的stack exchange站点中交叉发布。将来,你应该把问题移走。我能问一下为什么吗?这是最佳实践还是您个人的偏好?考虑到这个数据库实际上是MSDN示例数据库,我认为他们这样设计数据库一定是有原因的?是的,这是正确的,但是如果我错了,请纠正我,但在维度建模中,事实表是3NF,但DIM是2NF?是的,但3NF模型我指的是非维度模型。我假设那个人只是你们仓库中许多维度中的一个。对吗?仓库里还有其他尺寸和事实吗?或者你只需要一个问题中四张表的维度模型吗?你是对的,还有更多维度和更多事实。这恰好是DW中的第一个。我不确定我是否理解你的问题。示例数据库是以屏幕截图上描述的方式建模的,因为规范化减少了冗余,并且在OLTP系统中非常重要。如果要将相同的数据复制到数据仓库中,则不必担心冗余,性能变得至关重要,因此结构将被非规范化或扁平化。这就是为什么我建议使用单一维度。