Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 数据库一致性检查框架_Sql_Database_Testing_Frameworks_Consistency - Fatal编程技术网

Sql 数据库一致性检查框架

Sql 数据库一致性检查框架,sql,database,testing,frameworks,consistency,Sql,Database,Testing,Frameworks,Consistency,我正在寻找一个框架,利用它将大量数据库一致性检查规则集成到我们的系统中。这基本上应该是数据库检查的自动测试用例运行程序 要求: 易于编写新规则或支票 易于运行所有规则,将规则子集分组将是一个额外的好处 在规则执行时或执行后准确、简单地报告规则 我打算自己写一些类似的东西,但我想我会先看看是否能找到其他东西。我在谷歌上搜索了一下,但什么也没找到 一些规则示例: 确保在每个具有[Rank]N的记录的子表中,N为0或存在具有[Rank]N-1的记录。例如,对于给定的父记录,子记录的秩总是从0单调

我正在寻找一个框架,利用它将大量数据库一致性检查规则集成到我们的系统中。这基本上应该是数据库检查的自动测试用例运行程序

要求:

  • 易于编写新规则或支票
  • 易于运行所有规则,将规则子集分组将是一个额外的好处
  • 在规则执行时或执行后准确、简单地报告规则
我打算自己写一些类似的东西,但我想我会先看看是否能找到其他东西。我在谷歌上搜索了一下,但什么也没找到

一些规则示例:

  • 确保在每个具有[Rank]N的记录的子表中,N为0或存在具有[Rank]N-1的记录。例如,对于给定的父记录,子记录的秩总是从0单调递增到MAX(秩)
  • 我们的数据库使用一个全局“type/ID”系统,其中有一个MasterEntity表,该表是系统中每个实体的头表。每个实体类型属于一个或多个特定实体表,每个实体表只允许一个或多个特定类型。检查系统中的所有实体在其相应的实体表中是否有正确的记录
  • 确保所有安全类型在安全描述符表中都有一个条目

几乎所有这些都可以使用触发器来处理,以增强完整性约束


我建议您熟悉使用更精细的约束集(包括您描述的检查类型)来设计关系数据。几乎所有这些都可以使用触发器来处理,以增强完整性约束


我建议您熟悉使用更细粒度的约束集(包括您描述的检查类型)来设计关系数据。

您似乎在寻找一种允许您声明任意复杂度的数据库约束的系统。我假设您希望在约束被做出的那一刻捕捉到违反,而不是在某些事后验证过程中

要做到这一点,您需要一个关系型DBMS,唉,这样的东西还不存在

要在SQL系统中实现这一点,您唯一的选择是编写大量约束实施代码,并将这些代码保存在触发器等中。如果这是不可能的,由于政治等原因,目前没有有效的解决方案,你的问题

当心那些引导您使用无法与DBMS本身紧密耦合的对象解决方案的人。最终,有人会部署一些绕过dbms约束实施规则之外的代码,将您留在您决定问这个问题时的确切位置

我同意斯普利夫的观点。事后约束检查对我来说也是一个愚蠢的想法。但如果这是你真正想要的,那么这里有一个可能的方法:

根据理论,所有数据库约束都可以表述为“一个查询,其结果要求在任何时候都为空”。例如,这样的查询会给您类似“具有相同键值的所有不同行对”,或者,一般来说,这样的查询会给您一个“所有错误的事情”的列表

以每个可能违反的约束一个的速率写下查询/脚本,并在夜间运行这些查询/脚本。测试它们是否返回非空结果。

您似乎在寻找一个允许您声明任意复杂度的数据库约束的系统。我假设您希望在约束被做出的那一刻捕捉到违反,而不是在某些事后验证过程中

要做到这一点,您需要一个关系型DBMS,唉,这样的东西还不存在

要在SQL系统中实现这一点,您唯一的选择是编写大量约束实施代码,并将这些代码保存在触发器等中。如果这是不可能的,由于政治等原因,目前没有有效的解决方案,你的问题

当心那些引导您使用无法与DBMS本身紧密耦合的对象解决方案的人。最终,有人会部署一些绕过dbms约束实施规则之外的代码,将您留在您决定问这个问题时的确切位置

我同意斯普利夫的观点。事后约束检查对我来说也是一个愚蠢的想法。但如果这是你真正想要的,那么这里有一个可能的方法:

根据理论,所有数据库约束都可以表述为“一个查询,其结果要求在任何时候都为空”。例如,这样的查询会给您类似“具有相同键值的所有不同行对”,或者,一般来说,这样的查询会给您一个“所有错误的事情”的列表

以每个可能违反的约束一个的速率写下查询/脚本,并在夜间运行这些查询/脚本。测试它们是否返回非空结果。

好吧,您可以将正确答案(约束和触发器)与错误答案(事后测试)混合在一起,方法是使用约束构建第二个相同的数据库,然后尝试迁移数据。如果新数据库在您尝试插入时抛出抖动,则表明您发现了错误。一旦你的“政治”问题得到解决,你就可以永久性地迁移整个问题。

好吧,你可以将正确答案(约束和触发器)与错误答案(事后测试)混合在一起,方法是用约束构建第二个相同的数据库,然后尝试迁移数据。如果新数据库在您尝试插入时抛出抖动,则表明您发现了错误。一旦你的“政治”问题得到解决,你就可以永久地迁移整个问题。

我什么都不知道。这可能是因为大多数DBA都相当保守,可能不允许将现成的东西放入数据库中

  • 尽你所能地执行