在星型模式中,事实和维度之间的外键约束是否必要?

2023-11-27

我第一次接触数据仓库,我想知道事实和维度之间是否有必要有外键约束。没有它们有什么主要缺点吗?我目前正在使用关系星型模式。在传统应用程序中,我习惯了它们,但我开始怀疑在这种情况下是否需要它们。我目前在 SQL Server 2005 环境中工作。

UPDATE:对于那些感兴趣的人,我遇到了poll问同样的问题。


大多数数据仓库 (DW) 没有将外键实现为约束,因为:

  • 一般来说,外键约束会在以下情况下触发:向事实表中插入、任何键更新以及从维度表中删除。

  • 在加载过程中,索引和约束被删除以加速加载过程,数据完整性由 ETL 应用程序强制执行。

  • 一旦表被加载,DW 本质上是只读的——该约束不会在读取时触发。

  • 加载后会重新构建任何所需的索引。

  • 在 DW 中删除是一个受控过程。在从维度中删除行之前,会在事实表中查询要删除的行的键 - 仅当这些键不存在于任何事实表中时才允许删除。

为了以防万一,定期运行查询来检测事实表中的孤立记录是很常见的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在星型模式中,事实和维度之间的外键约束是否必要? 的相关文章

随机推荐

  • 将元素添加到状态 React

    我已经有了这样的状态 this setState conversation div conversation map element gt if element id this props id return div div div div
  • 旧应用程序的 PAM 身份验证

    我有一个遗留应用程序 它通过网络异步接收用户名 密码请求 由于我已经将用户名和密码存储为变量 那么在 Linux Debian 6 上使用 PAM 进行身份验证的最佳方法是什么 我尝试编写自己的对话函数 但我不确定将密码输入其中的最佳方法
  • YouTube 链接的正则表达式

    是否有人有一个正则表达式 可以从 几乎 所有可能的 Youtube 链接方式获取 Youtube 视频 非嵌入对象 的链接 我认为这是一个非常常见的问题 并且我确信有很多方法可以将其联系起来 起点是 http www youtube com
  • 修改 String 的 List 迭代

    我无法以这种方式修改列表的元素 for String s list s x s 执行后此列表中的代码元素未更改 如何用最简单的方式通过List实现modyfing的迭代 Since String对象是不可变的 您无法更改正在迭代的值 此外
  • 如何通过 TFS API 获取最新的变更集编号

    如何通过 TFS API 获取最新的变更集编号 你能给我举个例子吗 干得好 TeamProjectPicker tpp new TeamProjectPicker TeamProjectPickerMode SingleProject tr
  • jqGrid:如何在不同页面上使用多选

    简单的问题 很难找到答案 如果我尝试以编程方式选择一行 我会使用以下命令 grid jqGrid setSelection rowId 问题是它只选择当前可见页面上的行 如果rowId在另一页上 则不会被选择 更多信息 我的目标是在第一次加
  • C++函数计算字符串中的所有单词

    我在一次采访中被问到这个问题 显然这是一个简单的问题 但对我来说不是 而且仍然不明显 给定一个字符串 计算其中的所有单词 即使重复也没关系 只是总数 就像文本文件的字数一样 单词是由空格分隔的任何内容 标点符号并不重要 只要它是单词的一部分
  • Python for 循环中的变量赋值

    我知道在Python中 常规的C 风格的变量赋值被对东西的引用所取代 即 a 1 2 3 b a a append 4 print b gives 1 2 3 4 print a gives 1 2 3 4 但我仍然很困惑为什么基本类型会出
  • 如何将自定义模板页面添加到夹层?

    我已经在夹层上玩了几天了 我一直在关注这个blog 这非常有帮助 我现在需要制作一堆需要基于自定义模板的页面 我的自定义模板称为content html 我已经把它放进去了myProject gt myApp theme folder gt
  • 使用 Json.net 将 JSON 数组中的多个项目添加到 C# 中的对象

    谁能告诉我如何反序列化包含多个属性的对象 鉴于下面的场景 代码可以正常工作 public ActionResult Index string json name Person 2 email email protected var emp
  • 我需要在react-native项目中保留.watchmanconfig文件吗

    默认反应本机项目生成 watchmanconfig只是空对象的文件 我可以安全地删除它吗 一个子问题是 我可以做 参考任何看守配置来以某种方式改善反应本机项目体验吗 watchmanconfig可以安全删除 If Watchman没有找到
  • Keycloak - 将所有用户映射到角色

    我知道keycloak已经暴露了下面的api
  • 自定义功能区 onAction 语法问题

    我跟着这里的路线为 Access 应用程序创建自定义功能区 但所有按钮都不起作用 我不断收到一条错误消息 指出 Access 无法找到该函数或宏 即使它是公共的且位于标准模块中 最终我发现如果我使用以下语法它会起作用 onAction fn
  • ViewPager2 无法动态添加删除片段

    在索引处删除 添加片段会导致 Viewpager2 中出现意外行为 这是不可能的ViewPager但预计将与Viewpager2 它会导致重复片段和不同步TabLayout 这是一个演示项目重现了这个问题 有一个切换按钮 可以删除片段并将其
  • Keras 的 dropout 实现正确吗?

    The KerasDropout参考的实施这张纸 以下摘录自该论文 这个想法是在测试时使用单个神经网络而不丢失 该网络的权重是经过训练的按比例缩小的版本 重量 如果在训练期间以概率 p 保留一个单元 则 该单元的输出重量在测试时乘以 p 为
  • git:当前分支和分支创建之间的差异

    想象一下 我三天前创建了分支 B 这是我目前正在工作的分支 现在我想知道自创建分支以来发生了什么变化 X 这给出了 B 和 X 之间的差异 如图中的虚线 git diff A 上面的命令很方便 因为它很短而且我不需要记住 X 但是 我超级懒
  • Caffe 训练无需测试

    我在用Caffe在已知图像数据库上训练 AlexNet 我正在进行基准测试并希望排除测试阶段 这里是solver prototxt对于亚历克斯网络 net models bvlc alexnet train val prototxt tes
  • 从 AppDelegate 呈现特定的视图控制器

    每次我的应用程序处于活动状态时 我都尝试呈现一个视图控制器 密码请求类型视图 输入正确的密码后 它应该从堆栈中弹出 我尝试推送的密码视图不是初始视图控制器 因此我无法从 AppDelegate 的 applicationDidBecomeA
  • 使用 cmd.exe 时如何处理引号字符

    我正在尝试这样做 cmd exe C C Program Files Somewhere SomeProgram exe gt C temp Folder Containing Spaces SomeProgram out 但是 我遇到了与
  • 在星型模式中,事实和维度之间的外键约束是否必要?

    我第一次接触数据仓库 我想知道事实和维度之间是否有必要有外键约束 没有它们有什么主要缺点吗 我目前正在使用关系星型模式 在传统应用程序中 我习惯了它们 但我开始怀疑在这种情况下是否需要它们 我目前在 SQL Server 2005 环境中工