验证SQL数据库

时间:2010-11-05 11:39:27

标签: sql validation verification

我目前正在进行SQL分配,但某项任务提到我们需要在我们创建的数据库中对表进行验证和验证。

但是我们没有学到任何关于这个主题的知识,经过几个小时的谷歌搜索我只发现了你可以在create table语句中给出的检查约束。

请提及一些SQL表或数据库的验证和验证技巧。

3 个答案:

答案 0 :(得分:7)

通常通过对数据运行某种测试来验证。

数据通过不同的层,并且有不同类型的测试。

如果您考虑以下系统图层

  • 用户界面/客户端层
  • 应用层
  • 数据库图层

您可以在任何这些图层进行数据验证,但有以下差异

  • 首选数据库层中的验证是因为您可以将不同的应用程序连接到同一个数据库,虽然这是一件好事,但这些应用程序中的验证不一定相同,因此在数据库层上实现的验证是更好的数据完整性
  • 同时数据库层中的验证应该是最快的,因为数据库层最接近数据(数据不需要通过其他要处理的层,在这种情况下验证)
  • 例外情况是,如果验证规则是静态的并且不依赖于来自数据库的其他数据(例如测试输入是否为正整数),则客户端可以在数据库之前验证数据并避免不必要的任务应用程序层和/或数据库层。 (同时你也希望在数据库层实现验证,以防万一有bug或其他应用程序将连接到数据库)。同样的原则适用于应用程序层 - 如果验证应用程序层可以在不命中数据库服务器的情况下执行,则应该执行此操作,但在数据库层中应该这样做(保证)。

您可以考虑将以下作为验证测试​​(验证类型):

  • 类型验证(示例:是插入整数的数据?)。这可以通过在列上声明正确的类型来检查数据库层。)
  • 域验证(例如:数据是正整数吗?)。这可以使用CHECK约束
  • 在数据库层检查
  • 关系验证(例如:对于您要添加的记录,另一个表中已有记录)。这可以通过正确使用FOREIGN KEYS在数据库层进行检查
  • 业务规则验证(这些可能很复杂,例如'如果您要记录的值> 100,那么请确保您可以记录用户的IP,否则取消交易;如果不是,则取消打扰'。)这些验证可以通过触发器和存储过程完成。在现实世界中,业务规则验证通常在应用层实现(出于各种原因 - 从PL / SQL的相对不可维护性和不可移植性,这通常是您必须编写触发器的语言)到实现的事实复杂的触发器会降低性能并最终使系统变得非常复杂)。

答案 1 :(得分:1)

您需要确保您创建的基于教师规范的架构实际上完成了工作。验证是您使用其他方法测试某些内容的过程。所以......编写一个试图插入错误数据的小验证程序。制作一些测试用例。一旦您的模式设计通过了验证,就可以说它已经过验证或验证。

答案 2 :(得分:0)

您需要区分validationverification。假设我们遵循Formal Verification中的概念。

  

验证:“我们是要做出正确的事情吗?”,即   根据用户的实际需求指定产品

     

验证:“我们做了我们想做的吗?”,即   产品符合规格吗?

首先,我们需要在您的特定情况下对两者进行定义。例如,我们有一个表架构,可将员工信息保存在公司中:

Employee

ID | Name | Age | Salary

说,每个员工都有一个唯一的ID(永远不能为零)。然后我们可以用ID=0定义一行是无效记录。 (根据用户需要)

将所有记录插入表后,ID=0不应再有任何行。我们可以使用查询SELECT * from Employee WHERE ID=0进行验证,该查询不应返回任何行。 (我们做到了吗?)