根据数据库完整性的数据有效性和准确性

scd*_*dmb 5 database-design terminology

根据数据库完整性,数据有效准确是什么意思?

Ker*_*tts 6

数据库完整性一般是指满足以下条件:

  • 满足表上的所有约束(包括唯一约束、外键约束、主键约束等......)
  • 所有检查约束都得到满足(例如,在 Oracle 中,我可以有一个检查约束,要求值不为零,但不是唯一的。)
  • 满足所有唯一索引
  • 子表中的所有子行在父表中都有父行(外键)
  • 满足所有数据类型

请注意,根据您的业务逻辑,这里并没有真正说明数据是否有效和/或准确。此逻辑是您放入触发器、过程、验证例程等中的任何内容,您自己构建这些逻辑以尝试确保进入数据库的所有内容都正常。(应该注意,Oracle 的检查约束可以被视为一种业务逻辑形式,它像唯一或主键约束一样被强制执行)。

数据库会很乐意拒绝不符合上述标准的数据,假设它们已被定义,但也会很乐意接受不符合上述标准的无效或不准确的数据。如果我有一个包含人名的字段,则数据库无法确定“John Smith”或“Jonh Smiht”是否准确(注意错字)。因此,虽然数据库会说一切都很好,但您从目视检查中知道情况并非如此。(这个例子虽然简单,但很难做任何事情。毕竟,你怎么知道他的名字不是真的这样拼写?我仅将其用作进入系统的任何数据的示例。期望百分比的字段很容易将 5% 设为 50% —— 数据库如何判断哪个是有效的?不能没有你编写大量复杂的业务逻辑,即使那样——在某些时候,你怎么知道它不是 50%?或者它不是5%?或者它应该是 25%,打字员真的很困惑!)

使用数据库完整性机制对您有利,但不要因为没有完整性错误就认为您的数据是好的。它仍然可以很容易地变得糟糕和误导。此外,也不要假设您的业务逻辑可以确保良好的数据。是的,您可以防止明显的错误(例如,一个字段的值不应超出 0 到 100 的范围),但是一旦满足范围,在某些时候,您必须信任提供给您的用户数据。并且在某些时候,用户会错误地将其提供给您。,坏数据,具有完全有效的数据库完整性。


Mik*_*ll' 6

在理论层面,一个域可以用一个值表来表示。(在理论上,因为非负整数域的值的数量是无限的。)有效值来自该域。

在 SQL 数据库中,您可以使用适当数据类型和约束的某种组合来建立有效值。例如,您可以将“employee_id”声明为一个整数,并通过 a) 外键约束限制为包含 'n' 个整数的表或 b) 检查约束来限制整数范围。

准确意味着,在所有可能的有效值中,用户选择了与实体在现实世界中的状态或描述相对应的值。从这个意义上说,用户可以是人,也可以是程序。

例如,假设图书馆中的一本书可以具有以下任何一种倾向:“已签出”、“最近归还”(尚未入库)、“入库”、“正在修复”和“丢失”。如果我签出一本书,并且数据库将其状态存储为“已签出”,那么数据库就该副本的处置而言是准确的。(在我的图书馆,结帐和归还由计算机完成,而不是由人完成。)

所以数据完整性需要数据库(只允许有效值)和用户(从所有可能的值中输入正确的值)的合作。