问题标签 [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 投票
4 回答
782 浏览

xml - 检查 XML 配置文件内部一致性的工具、规则或流程

我从事过具有非常复杂的 XML 配置的项目,面临的一个问题是维护 XML 的内部一致性。

在这种情况下,我指的不是严格的 XML 模式一致性,而是使用的节点之间的更高级别的关系。大多数问题是由以 XML 编码的信息之间的隐式链接以及该信息与代码库的隐式关系引起的。示例可能是:

  • XML 节点数据隐式链接到代码中的枚举
  • 相同配置中相关的业务对象(因为它们共享需要一致的信息),它们之间没有任何明确的关系
  • 要在运行时编译和解析的 XML 中的代码

让我感到震惊的是a)这可能成为一种增加频率的做法,b)在某些情况下,我们隐含地创建了一种新的编码语言,它没有在编译时检查——实际上在它运行之前几乎没有检查。

是否还有其他人面临类似的情况,是否有任何工具或方法可以使问题更容易处理?我想要一些与技术无关的一般示例——我自己的具体经验是使用 C# 和专有系统的配置。

注意:尽管我在下面对此有答案,但我无意将自己的答案作为最终答案。

0 投票
1 回答
225 浏览

sql-server - 如何在这种情况下为 2 个 SQL Server 表定义参照完整性?

我在 SQL Server 2005 中有 2 个表,如下所示

表 A

  • ActionID(PK,int,不为空)
  • ProgressID(唯一标识符,不为空)
  • ReferID(唯一标识符,不为空)
  • 字段 XYZ(varchar(50),不为空)
  • 字段 MNO(tinyint,不为空)

表 B

  • TrackID(PK,int,不为空)
  • ProgressID(唯一标识符,不为空)
  • ReferID(唯一标识符,不为空)
  • 字段 ABC(varchar(20),不为空)
  • 字段 EFG(日期时间,不为空)

现在我有一个具体的问题:

两个表ProgressID中的 指的是同一个实体。我想建立一个完整的关系,这样ProgressID当表 B 中存在值时,表 A 中的删除是不可能的。如何做到这一点?

0 投票
3 回答
1141 浏览

sql-server - SQL Server 2005 复制完整性违规 SQL Server,错误号:28549

我希望有人可以帮助我解决一个非常奇怪的问题。

当用户同步他们的设备时,他们会收到此错误:

由于违反完整性,无法重新应用行操作。检查发布过滤器。[表 = 资产详细信息,操作 = 插入/更新,RowGuid = {C92038E4-18EA-EE11-4C9F-2952CDECFCC7}] HRESULT 0x80040E2F (28549)

当我们去服务器查询这一行时,它的父行(表称为 Asset)似乎是有效且正确的。当我们探索完整的过滤树(为了更好的描述)时,所有数据似乎都是正确的。

从我们在数据库中可以看到,应该发送给订阅者的数据遵守数据库中的参照完整性约束。它也服从发布过滤器。

我们是否有理由在订阅者身上遇到这个问题?我们如何解决这个问题?

此外,是否可以准确记录发送到设备的数据 - 如果不是数据,则针对 sdf 文件运行的语句以确定发生的情况?

在此先感谢您的帮助,

莫里森

0 投票
3 回答
18059 浏览

mysql - 在 MySQL 中,我可以将参照完整性检查推迟到提交之前吗

正如在这个问题中一样,我一直在阅读 PoEAA 并想知道是否可以将参照完整性检查推迟到 MySQL 中提交。

当我想在同一个提交中插入一堆产品和相关产品时,我遇到了这个问题。即使在事务中,当我尝试插入related_products连接表时也会遇到约束错误。

如果有帮助,我将使用 PHP PDO 进行数据库连接。

我很感激你能提供的任何帮助。

0 投票
3 回答
114 浏览

database - 我应该通过数据库错误来执行业务逻辑吗?

我最近一直在考虑一个有趣的设计决定。假设我正在将用户名添加到表中,并且我想确保没有重复。用户名列是NOT NULL UNIQUE。我可以:

  1. 在插入之前查询数据库以确保没有重复的名称,或者
  2. 只需INSERT, 并捕获来自数据库引擎的任何异常。

假设我使用的数据库能够强制执行约束,我想知道这些选择中的每一个在什么情况下是合适的。

0 投票
2 回答
987 浏览

sql-server-2005 - 没有唯一约束的 MS SQL Server 2005 的正确外键?

我有两个表(MS SQL Server 2005)和一个现有的应用程序(除了索引等,不允许更改数据库)。

这两个表是:

现在,SubActivities对于ActivityDetailKey. 基本上,对于每一ActivityDetail行,可以有很多SubActivities行,并且没有什么可以阻止用户删除ActivityDetails一行并留下SubActivities孤立的行。

应用程序中应该有一些“软锁”可以防止这种情况发生,但它不起作用,我也想在 DB 层中提供更好的完整性。

但我似乎无法添加外键,因为SubActivities'ActivityDetailKey列不是唯一的。

ActivityDetails如果有孩子在场,如何防止人们删除行?

谢谢

编辑

我为复杂性道歉。该SubActivities表实际上名为TEDetailSubActivities. 我在问题中更改了它,以便更容易阅读。

但无论如何,这里是两个表的完整架构的要点。

https://gist.github.com/840479

我很感激任何帮助。

0 投票
3 回答
1716 浏览

mysql - MySQL 关系和约束,我应该使用它们吗?

我在 MySQL 中构建了一个大型数据库,并使用 SQLYog 创建了表之间的所有关系。这一切都很好,但是在我正在构建的 PHP 站点中,当从数据库中删除行时,我经常遇到麻烦,我经常遇到参照完整性约束。因此,我首先尝试从链接表中删除数据或将字段设置为 NULL。我通常可以通过一些试验和错误来让它工作,但似乎没有我应该这样做的方法或适当的过程。我应该使用'on delete set NULL or cascade delete settings'吗?我不知道该使用哪个,并担心它可能会删除其他表中的重要数据。

人们甚至会费心在他们的数据库中设置关系约束吗?我的意思是执行删除似乎要容易得多,然后编写一些额外的行来更新在 PHP 代码中链接到它的其他表。

任何帮助将非常感激。

0 投票
1 回答
5736 浏览

automated-tests - 测试抛出异常说用户缺少权限或找不到对象:将 HSQLDB 更新到 2.0.0 后的 REFERENTIAL_INTEGRITY

最近我将我的 maven HSQL 依赖项从 1.8.1.2 版本升级到了 org.hsqldb:hsqldb:2.0.0。然而,所有使用 HSQLDB 的测试都失败了,只有一个例外:

我用谷歌搜索并找到了一些答案,但我发现它们很难理解。如何修复我的测试?在升级之前,我的测试工作正常。

0 投票
0 回答
181 浏览

oracle - 没有数据透视的行之间的声明性完整性约束

我有类似以下连接表的情况:

我需要在表上设置一个约束,以防止输入重复的组。换句话说:

应该失败,但是

应该成功,因为它是一个独特的群体。

我想到的两种方法是:

  1. 根据顺序在物化视图中透视表,并在透视字段上放置唯一键。我不喜欢这样,因为在 Oracle 中,由于旋转规则和 32 列索引限制(我想了解决第二个问题的方法,但仍然),我必须限制组中的行数。
  2. 在 B_ID 的组合上创建一些唯一的哈希值并使其唯一。也许我还不够数学家,但我想不出一种不限制我可以用于 B_ID 的值数量的方法。

我觉得我在这里缺少一些明显的东西,比如我可以添加某种排序列并设置不同的唯一键,但我已经做了很多阅读并且没有想出任何东西。也可能是我继承的数据模型有缺陷,但我想不出任何能给我类似灵活性的东西。

0 投票
2 回答
10587 浏览

sql-server - 如何在检查约束中引用其他表?

我有一张桌子,ProductSupportArticles:

ProductID 是 Products.ID 的外键,ParentArticleID 是同一个表 ProductSupportArticles.ProductSupportArticleID 的外键。我有一个检查约束 ProductSupportArticleID != ParentArticleID 以便文章不能是它自己的父级。

但是,与特定产品相关的支持文章不应成为与不同产品相关的文章的父项或子项。如何添加检查约束或类似的说法:(ProductID = (SELECT ProductID FROM ProductSupportArticles P WHERE ParentArticleID = P.ProductSupportArticleID))

或者我应该如何以不同的方式实现我的表?