问题标签 [referential-integrity]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
392 浏览

sql - 合并相同的表但保持独立的参照完整性

考虑一个带有事实表的维度模型,例如(fk_dim1value, fk_dim2value, ..., value)fk_X是对应平凡维度表的外键dim1value (id, value), dim2value (id, value),等。

这些事实和维度表是从不同的来源自动收集的,所以它们有很多......而且它们是多余的:所有维度值表在结构上都是相同的(id, value),表示没有进一步语义的文本值的简单集合(唯一的区别是在各种事实表中引用它们的不同外键)。稍后可能会出现不那么琐碎的维度类型,但不同类型维度的集合仍然很小。

所以我想将维度表合并到一个引用 table 的表中dimvalue (fk_dim, dimvalue_id, value),并且仅在每个维度中是唯一的。然后自然主键是复合的:.fk_dimdimension (dim_id, name)dimvalue_id(fk_dim, dimvalue_id)

事实表外键列现在都引用同一个表,dimvalue (fk_dim, dimvalue_id, value)......但当然,每一列都与特定维度相关联,因此仍应仅限于具体引用该维度的值(统一表的水平分区dimvalue)。

有没有(明智的)方法可以做到这一点?

我的意思是类似于“半复合”外键,即对复合 PK 的“切片”的单列引用,其他列具有固定值。一个“完全复合”的 FK 将是FOREIGN KEY (col1, col2) REFERENCES dimvalue (fk_dim, dimvalue_id),但这里fk_dim是固定的,因此键的“家”侧只是一列,引用dimvalue主键的第二列;类似的东西FOREIGN KEY (fk_dim7value) REFERENCES dimvalue (fk_dim=7, dimvalue_id)

这样的事情可能吗?还是我在最后一段中迷失了方向?我应该放弃整个dimvalue表的外键,然后添加检查约束以按维度限制吗?还是参照完整性要求我放弃更多而只接受所有单独的相同表?

(约束对写入性能的影响并不重要;读取性能是设计目标。)

0 投票
2 回答
142 浏览

c# - 相关插入在 transationscope 中失败

我正在使用 TransactionScope 将对象的数据添加到一个数据库中。

伪代码:

我在 InsertChildIntoTableB() 遇到异常,错误是 TableB 中的 ParentID 在 TableA 中没有匹配的主键条目。

连接被重用。

我该如何解决这个问题?在 TableA 上执行 SELECT WITH (NOLOCK) 确实会显示新插入的父记录,但下面的子记录插入看不到它。

编辑澄清:在foreach循环中,我已经插入但未提交的新 ParentID。问题是插入到孩子的 TableB 失败,因为父 TableA 的 TableB 中的 FK 看不到未提交的新 TableA PK ID。

0 投票
7 回答
144 浏览

sql - 处理应用程序中的已删除数据

假设您正在编写一个简单的应用程序。该模型是一个“项目”有一个“类别”。可以通过从包含所有可能类别的下拉列表中进行选择来编辑项目的类别。

用户创建以下类别:C1、C2、C3。

用户创建以下项目、类别关联:[P1, C1], [P2, C2], [P3, C3]

后来,C2 类被删除。现在,如果用户尝试编辑 Project P2 的类别,则会出现一些问题:需要检索类别以填充下拉列表。但已删除的类别将不会被检索。因此不会检索到 C2。(如果检索到已删除的类别,则下拉列表将充满已删除、不可用的字段)

湾。如果 C2 也被检索,则存在用户可以再次将已删除的类别 C2 分配给 P2 的风险。

处理这个问题的最佳设计方法是什么?

0 投票
6 回答
1224 浏览

mysql - 更新:当我们在 MySQL 中没有参照完整性功能时,如何在 MySQL 中实现外键概念?

我的问题是关于 MySQL 数据库中的参照完整性概念。由于我们的 DBA 的某种限制,我们不允许使用 MySQL 的参照完整性功能,所以我的问题是“当我们在 MySQL 中没有参照完整性功能时,我们如何在 MySQL 中实现外键概念?”

谢谢。

0 投票
2 回答
185 浏览

sql - 如何与普通的父表保持参照完整性?

假设我有一张带有“问题组”的表格

而且,对于每组问题,我都有“问题”和“可能的答案”

现在,在 PHP/HTML 中,我对第 42 组的问题和可能的答案进行了(虚拟)全叉积,以构建一个 2 条目表,用户将在其中选择他/她的答案(HTML 版本

我知道我需要
insert into answers (question, answer, ...) values (5, 135, ...)牙齿

insert into answers (question, answer, ...) values (89, 8, ...)电影

问题是:有没有办法强制answers表格中的问题和答案“属于”同一组问题?

我不希望这样
insert into answers (question, answer, ...) values (709, 71, ...)
做,因为问题 709“属于”第 9071 组,而答案 71 属于第 42 组。

0 投票
3 回答
480 浏览

sql-server - SQL Server 关系隐藏在存储过程而不是架构中

目前,我们几乎没有参照完整性,并且有许多自连接的表(实际上可能更好地表示为连接的单独表或视图)。

这些表如何相互关联的知识隐含在存储过程的逻辑中,而不是明确的模式中。我们正在考虑改变这一点。

第一步是真正理解隐含的关系并记录它们。

所以我的问题是...

什么是提取隐含信息的最佳方法,而不是关注每个存储过程。我会考虑任何工具,编写我自己的 SQL 来查询系统表,或者利用 SQL-DMO 模型——或者实际上任何让计算机做更多工作而我做更少工作的东西。

0 投票
2 回答
120 浏览

asp.net - ActiveDirectoryMembershipProvider 和参照完整性

过去,当我实现自己的身份验证机制时,我会在我的应用程序的 MySQL 数据库中拥有一个与其他表有关系的用户表。但是,现在我正在考虑使用 ActiveDirectoryMembershipProvider,我看不到在 AD 用户和这些表之间创建类似关系的方法。

解决此问题的正常方法是什么?我是否应该接受这样一个事实,即有人可能会插入带有与现有用户不对应的用户 ID 的记录?我实际上并不期望会发生这种情况,但我习惯于确保数据库级别的完整性。

0 投票
1 回答
349 浏览

.net - 数据归档 [设计]

我正在为使用 Dotnet 和 SQL Server 作为后端的应用程序开发存档模块。通过多种归档方法,我们决定构建一个自定义应用程序,将整个数据库归档到另一个镜像数据库,直到达到选定的阈值,然后从源数据库中删除归档项目。这必须通过自定义应用程序完成,而不是通过链接服务器、作业、SSIS、复制或其他任何东西来完成。

在每次归档运行时,有些项目将被清空并再次重写。在开始构建模块之前,我们正在考虑从镜像存档数据库中删除外键约束,以避免在清空这些表并重新写入时违反任何引用完整性(仅删除约束,列和值仍然存在于存档中) D B)。然而,这种方法对我来说甚至并不可疑,但也有点令人不安。所以我在这里问什么是处理这个问题的正确方法?

0 投票
3 回答
4830 浏览

couchdb - CouchDB 是否支持参照完整性?

我是 CouchDB 的新手,正在学习它。我没有遇到 CouchDB 对引用完整性的支持。我们可以为 CouchDB 文档中的字段创建外键吗?

例如,是否有可能确保订单文档中使用的供应商名称在供应商数据库中可用?

CouchDB 是否支持参照完整性?是否可以将文档中的字段作为主键?

0 投票
2 回答
694 浏览

php - mysql - 跨多个数据库的引用完整性?

我在 php / mysql 应用程序中有两个数据库。一个用于用户数据,另一个用于内容。

我最近不得不使用 inno db 表来强制执行一些引用完整性。显然,用户表将需要参与这些关系。

有没有办法在保持引用完整性的同时保持数据分离?

任何建议表示赞赏。

谢谢。