Sql server 关系数据仓库中的引用完整性。值得吗?还有什么选择?

Sql server 关系数据仓库中的引用完整性。值得吗?还有什么选择?,sql-server,database-design,data-warehouse,referential-integrity,Sql Server,Database Design,Data Warehouse,Referential Integrity,如果您必须使用SQLServer2008构建一个符合圣经比例的关系数据仓库,您会使用外键来加强数据完整性,还是使用其他方法 我喜欢外键,因为你只需要把它们弄对一次,它们总是在那里保护完整性。我正在考虑去禁用、加载、启用路径 有什么想法吗 提前谢谢。哦,我当然会的!您必须记住的是,您的数据库是您的数据存储,而不仅仅是前端的数据存储。这是微妙的差异,但重要的是当你开始考虑未来。现在,您(大概)拥有管理应用程序,但谁能说将来还会是这样呢 通过将尽可能多的验证卸载到数据库中,您可以在某种程度上证明您的应

如果您必须使用SQLServer2008构建一个符合圣经比例的关系数据仓库,您会使用外键来加强数据完整性,还是使用其他方法

我喜欢外键,因为你只需要把它们弄对一次,它们总是在那里保护完整性。我正在考虑去禁用、加载、启用路径

有什么想法吗


提前谢谢。

哦,我当然会的!您必须记住的是,您的数据库是您的数据存储,而不仅仅是前端的数据存储。这是微妙的差异,但重要的是当你开始考虑未来。现在,您(大概)拥有管理应用程序,但谁能说将来还会是这样呢

通过将尽可能多的验证卸载到数据库中,您可以在某种程度上证明您的应用程序是可靠的—至少如果其他人试图针对您的数据库进行开发,您的假设就会更多

将其放在数据库端的缺点是插入速度较慢,因此您需要权衡应用程序的读写负担。在工作中,我们对读的需求远远大于对写的需求,因此引用完整性似乎是显而易见的。但是,我们的表很大(并且可以自由地进行导入),因此我们采用了一种多步骤导入路线,即创建表、插入数据、创建索引,然后创建外键和其他约束


我希望这有帮助

首先,我不会构建(物理上)符合关系模式的数据仓库。提议的数据仓库是完全标准化的,还是问题中的“关系”一词只是表示它将构建在SQL数据库中?

是的,我通常使用外键。这在任何数据库中都很重要,但如果仓库是一个包含许多表的复杂仓库,则可能尤其如此


在仓库中使用完整性约束的原因与在任何其他数据库中使用的原因基本相同:它将错误数据进入数据库的风险降至最低;这通常是实施此类完整性规则的最经济、最有效的方法;这意味着优化人员可以利用这些约束来提高查询性能;使用数据并需要解释其结构的开发工具和用户也可以使用这些约束条件。

@aCiD2,OP询问的是数据仓库。@Mark,我理解,但这会影响我的anwser吗?@aCiD2,我认为对前端的引用与数据仓库-“源系统”无关会更相关。还有一个问题是ETL过程是否应该强制执行引用完整性——通常,我会这样认为,因此没有必要在DB模式中强制执行它。但是,我通常不会期望使用完全规范化的模式作为数据仓库的基础。尽管我们目前拥有源系统,并且知道其中存在引用完整性,但情况可能并非总是如此。我喜欢外键提供的“设置并忘记”方法。而且。。仓库的大小是否会影响参考完整性方面的设计,以及您如何处理它?将有一个标准化的层来捕获所有细节。之后将构建一个或多个层,其中将加载摘要数据进行分析。由于仓库的潜在规模,以及我们不知道这些(医疗)数据将来将如何使用的事实,我们需要以规范化的形式将细节存储在第一层中。星型模式很少显著大于以关系方式存储的相同数据-这是因为构建星型模式所涉及的非规范化仅适用于维度,通常比事实表小几个数量级。话虽如此,如果您致力于构建真正的关系数据仓库,那么是的,我肯定会使用外键。看看。不确定我是否应该在这里添加或添加到类似的问题,但是…如果完整性是一个问题,您可以始终纠正完整性函数或存储过程,以查找“孤立”事实。(外键没有意义的行)。然后,您可以在数据库的下一个加载周期之后/期间/之前清理这些内容。