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 个回答 Voted 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 的范围),但是一旦满足范围,在某些时候,您必须信任给您的用户数据。并且在某些时候,用户会错误地把它给你。噗,坏数据,具有完全有效的数据库完整性。 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) 检查约束来限制整数范围。 准确意味着,在所有可能的有效值中,用户选择了与现实世界中实体的状态或描述相对应的值。从这个意义上说,用户可以是人也可以是程序。 例如,假设图书馆中的一本书可以具有以下任何一种处置方式:“已签出”、“最近归还”(尚未入库)、“入库”、“正在修理”和“丢失”。如果我签出一本书并且数据库将其状态存储为“已签出”,那么数据库就该副本的处置而言是准确的。(在我的图书馆,结账和归还是由计算机完成的,而不是由人完成的。) 所以数据完整性需要数据库(只允许有效值)和用户(从所有可能的值中输入正确的值)的合作。
数据库完整性一般是指满足以下条件:
请注意,根据您的业务逻辑,这里并没有真正说明数据是否有效和/或准确。这个逻辑是你放入触发器、过程、验证例程等的任何东西,你自己构建它以尝试确保进入数据库的所有东西都是好的。(应该注意,Oracle 的检查约束可以被认为是一种业务逻辑形式,它像唯一或主键约束一样被强制执行)。
假设它们已定义,数据库将愉快地拒绝不符合上述标准的数据,但也会愉快地接受不符合上述标准的无效或不准确数据。如果我有一个包含人名的字段,则数据库无法确定“John Smith”或“Jonh Smiht”是否准确(注意错字)。因此,虽然数据库会说一切都很好,但您从目视检查中知道它不是。(这个例子虽然微不足道,但很难做。毕竟,你怎么知道他的名字不是真的是这样拼写的?我仅将它用作进入系统的任何数据的示例。期望百分比的字段很容易将 5% 设置为 50% —— 数据库如何判断哪个是有效的?如果不编写大量复杂的业务逻辑,它就无法实现,即使那样——在某些时候,你怎么知道它不是 50%?还是不是5%?或者说它应该是 25%,而打字员真的很困惑!)
使用数据库完整性机制对您有利,但不要因为没有完整性错误就认为您的数据是好的。它仍然很容易变得糟糕和误导。此外,不要假设您的业务逻辑也可以确保良好的数据。是的,您可以防止明显的错误(例如,一个字段的值不应超出 0 到 100 的范围),但是一旦满足范围,在某些时候,您必须信任给您的用户数据。并且在某些时候,用户会错误地把它给你。噗,坏数据,具有完全有效的数据库完整性。
在理论层面,一个域可以用一个值表来表示。(在理论上,因为非负整数域的值的数量是无限的。)有效值来自该域。
在 SQL 数据库中,您可以使用适当的数据类型和约束的某种组合来建立有效值。例如,您可以将“employee_id”声明为整数,并使用 a) 对“n”整数表的外键约束或 b) 检查约束来限制整数范围。
准确意味着,在所有可能的有效值中,用户选择了与现实世界中实体的状态或描述相对应的值。从这个意义上说,用户可以是人也可以是程序。
例如,假设图书馆中的一本书可以具有以下任何一种处置方式:“已签出”、“最近归还”(尚未入库)、“入库”、“正在修理”和“丢失”。如果我签出一本书并且数据库将其状态存储为“已签出”,那么数据库就该副本的处置而言是准确的。(在我的图书馆,结账和归还是由计算机完成的,而不是由人完成的。)
所以数据完整性需要数据库(只允许有效值)和用户(从所有可能的值中输入正确的值)的合作。