AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 3688
Accepted
scdmb
scdmb
Asked: 2011-07-08 04:04:25 +0800 CST2011-07-08 04:04:25 +0800 CST 2011-07-08 04:04:25 +0800 CST

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

  • 772

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

terminology database-design
  • 2 2 个回答
  • 3270 Views

2 个回答

  • Voted
  1. Kerri Shotts
    2011-07-08T04:25:51+08:002011-07-08T04:25:51+08:00

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

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

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

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

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

    • 6
  2. Best Answer
    Mike Sherrill 'Cat Recall'
    2011-07-08T04:25:54+08:002011-07-08T04:25:54+08:00

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

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

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

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

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

    • 6

相关问题

  • 过滤索引是否有助于改进基于输入时间的查询,还是应该避免这种情况?

  • MySQL VARCHAR 和 TEXT 数据类型有什么区别?

  • 存储计算值或根据要求重新计算它们更好吗?[复制]

  • 存储与计算聚合值

  • 在数据仓库中实现多对多关系有哪些方法?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve