- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
大家好。我目前正在准备考试,想知道数据库系统中用户定义的完整性规则的一些示例。据我所知,这意味着我可以为列设置某些条件,当插入数据时,它需要满足这些条件。
例如:如果我设置了一个规则,一个id只需要由5个整数组成,那么当我插入一个id由整数和一些字符组成的行时,它将不接受它并返回一个错误。
有人能证实一下并给我一些意见吗?非常感谢你提前!
最佳答案
是的,这就是数据库的全部概念,而不是不受控制的数据存储位置。
它们不是用户定义的,而是定义的数据建模器、数据库管理员或数据库所有者(所有特定术语)。如果你把它留给用户或开发人员,他们将免费阅读垃圾或互联网,并实现一个怪物。
30多年来,数据库的概念是它的整个定义都在数据库中。在此期间,已经有许多标准(来自国际标准机构,而不是来自单一供应商或软件销售商),它们逐渐确定了各种标准,以提高数据库的完整性。sql供应商已经实现了它们(好吧,不是免费软件mob,但是他们不提供iso/iec/ansi sql;而且他们在这些产品中使用标准术语“sql”是欺诈的)。
在标准SQL中,我们有以下声明(即不是数据库外部的代码,不是触发器):
参照完整性。在插入子行之前,子代引用的父行必须存在。这正好是关系的定义,所以没有重叠。
数据完整性。各种形式:
首先确保使用了正确的数据类型。一贯地。这就避免了将字符值放在整数列中;将10位值放在4位列中,等等。
规则。它们确保遵守列的所有规则(例如您的示例)。
检查约束。这些选项允许在允许插入之前对照其他列检查列值。它们可以是简单的,也可以是复杂的。
(使用触发器,可以实现上述声明不提供的任何进一步约束)
是的。
交易完整性。这确保了不同表中行之间的完整性得到维护,并且可以依赖这些数据。
我重复一遍,如果它没有实现这些基础(在每一列上),它就不是一个数据库,它只是一个存储位置,对于没有完整性的数据。
您可以通过查看一些标准的sql手册或sql标准本身(都可以在internet上免费获得)轻松地确认这一点。
在互联网上发现的任何与上述内容相反的信息都不值得回应。
现在任何有键盘和连接的疯子都可以发布任何东西。wiki是由不合格的业余人士编写的,而“定义”每周都会发生变化,因为不合格的业余人士会对其进行编辑。
他们中的大多数人都在写他们所相信的东西,没有任何实际经验,对他们的信仰进行测试或验证。
与标准争论是浪费时间;他们有目的;他们是由比我们更伟大的思想创造的;他们有很长的时间(30年!)被更大的组织和政府接受(要求)。小型组织可以通过遵循这些标准来节省时间,而不是抱着某种“不同”的信念。我们在这个行业里从事的是物理科学和技术,而不是魔法思维。
应用层中的业务规则
好吧,如果你把规则放在服务器上,它们是由服务器保证的。我相信,任何一天,任何应用程序层的完美执行,尤其是那些不了解数据库或其用途的人编写的应用程序层。
数据库应该完全独立于使用它们的应用程序(注意复数)。如果把这些规则放在五个应用程序中,而不是放在一个数据库中,那就太傻了。当规则改变时会发生什么,有谁能保证所有的应用程序都能正确地、一致地升级?
还要记住,数据是公司资产,而不是部门资产。该公司实施标准,这样他们就可以避免部门管理人员浪费时间,在部门之外进行30年前已经解决的愚蠢争论。
同样,人们把自己的想法公布出来,就好像他们是第一个经历这一思想过程的人一样,没有任何资格(这意味着他们知道标准),也没有理解或实际经验(这将很快改变他们的信仰)。
因此:所有与数据有关的业务规则,无论是以何种形式或形式,都应与数据一起放在数据库中的iec/iso/ansi标准目录中。
任何业务逻辑(依赖于应用程序和使用情况)都可以放在业务决定的任何地方。这样一来,企业资产的完整性就得到了保护,而损害仅限于那些具有神奇思维的部门。
关于database - 数据库系统中用户定义的完整性规则的示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4699699/
在complier.h中有一个宏定义如下: # define __cond_lock(x,c) ((c) ? ({ __acquire(x); 1; }) : 0) 但是这里我有一个问题,就是哪里
curl_easy_setopt 的选项在哪里?定义?我试图寻找 CURLOPT_VERBOSE 和其他一些整数值,但这些似乎没有在 curl.h 中明确定义。 最佳答案 第 792 行: #ifde
我确实有一个如下所示的类(class): //.h file class __declspec(dllimport) MyClass { public: //stuff pri
作者: zhuwenzhuang, 2024.05.08. 阅读前假设读者熟悉数据库使用,了解 SQL 的语法和关系算子的大概含义, 能通过 EXPLAIN 命令查看数据库执行计划. 0 前言
我似乎无法找到是否可以声明一个 header 对象以便在响应 header 中重用它,有一些示例定义了响应模式的对象,但它不会转置为响应 header 。我只设法制作了一个可重用的响应对象,如下所示:
css 选择器 * + * 实际上是什么意思?当您执行检查元素时,您可以在谷歌浏览器的控制台中看到它。在我看来,这似乎是对 "Every second child"应用一种风格,但仍然想确定。谁能帮我
我试图弄清楚基本的IO Haskell 函数是定义好的,所以我使用了this reference我到了putChar函数定义: putChar :: Char -> IO () putChar
我得到了一个自动生成的文件,该文件定义了程序集属性,我正在尝试理解内容。 [assembly: global::System.Runtime.Versioning.TargetFrameworkAtt
This文档演示了如何检查变量是否先前已在 gnuplot 脚本中定义。 文档中的示例: a = 10 if (exists("a")) print "a is defined" if (!exist
好吧,这是一个相当基本的问题:我正在关注 SICP 视频,我对 define、let 和 之间的区别有点困惑设置!. 1) 根据 Sussman 在视频中的说法,define 只允许为变量附加一个值一
我一直在尝试定义一个包含只能具有以下三个值之一的字段的 XSD: 绿色 红色 蓝色 本质上,我想在架构级别定义严格的枚举。 我的第一次尝试似乎是错误的,我不确定修复它的“正确”方法。
有人可以定义“POCO”到底是什么意思吗?我越来越频繁地遇到这个术语,我想知道它是否仅与普通类有关还是意味着更多? 最佳答案 “普通旧式 C# 对象” 只是一个普通的类,没有描述基础结构问题或域对象不
在我经常看到的一些django模型中 myfield = models.CharField(_('myfield')) class_name = models.CharField(_('Type'),
每当 BOOL 数据类型不容易预定义时,我都会使用以下定义进行 boolean 运算, typedef unsigned char BOOL; (由于内存使用)。 我意识到出于性能原因,使用本地总线宽
l_ABC_BEANVector = utilRemote.fnGetVector("ABC_COVBEANVector"); 编码的含义是什么?任何帮助,我真的很感激。谢谢 最佳答案 唯一可以肯定地
我正在使用 javacc 开发一个项目,我遇到问题并需要一些帮助,我的文件中有这样的内容: STRING COPYRIGHT (C) 2003, 2004 SYNOPSYS, INC.; 我为单词 S
我想弄清楚基本的 IO定义了 Haskell 函数,所以我使用了 this reference然后我到了 putChar函数定义: putChar :: Char -> IO () putCha
我在具体类中使用 @property 定义 getter 时遇到问题。这是Python代码: from abc import ABCMeta, abstractproperty class abstr
我正在为大学用 C 语言编写一个小游戏,但我陷入了困境。我(在头文件中)有这个结构: typedef struct{ game_element field[MAX_ROWS][MAX_COLU
我一直在 .l 文件中创建标记定义。由于数据集数量庞大,它变得有点乏味。有没有办法读取文件中的所有单词,例如包含所有名词的 noun.txt 并给所有名词一个标记。 基本上,我想自动化这部分: %%
我是一名优秀的程序员,十分优秀!