数据库——数据完整性

数据完整性定义:

    数据库完整性(Database Integrity)是指数据库中数据在逻辑上的一致性、正确性、有效性和相容性。数据库完整性由各种各样的完整性约束来保证,因此可以说数据库完整性设计就是数据库完整性约束的设计。数据库完整性约束可以通过DBMS或应用程序来实现,基于DBMS的完整性约束作为模式的一部分存入数据库中。可以理解为数据的语义正确性。

区分数据完整性和数据安全性

        –数据的完整性

    防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据

    防范对象:不合语义的、不正确的数据

    –数据的安全性

    保护数据库防止恶意的破坏和非法的存取

    防范对象:非法用户和非法操作

那么为了维护数据的完整性,DBMS必须做到:

1.提供定义完整性的约束条件的机制(保证数据的更新和插入符合约束,从而保证了数据完整性)

2.提供完整性检查方法(检查数据中是否出现了非完整性数据)

3.提供违约处理(若发现了非完整性数据要进行处理)

为什么需要数据完整性?


数据库完整性对于数据库应用系统非常关键,其作用主要体现在以下几个方面:

1.数据库完整性约束能够防止合法用户使用数据库时向数据库中添加不合语义的数据。

2.利用基于DBMS的完整性控制机制来实现业务规则,易于定义,容易理解,而且可以降低应用程序的复杂性,提高应用程序的运行效率。同时,基于DBMS的完整性控制机制是集中管理的,因此比应用程序更容易实现数据库的完整性。

3.合理的数据库完整性设计,能够同时兼顾数据库的完整性和系统的效能。比如装载大量数据时,只要在装载之前临时使基于DBMS的数据库完整性约束失效,此后再使其生效,就能保证既不影响数据装载的效率又能保证数据库的完整性。

4.在应用软件的功能测试中,完善的数据库完整性有助于尽早发现应用软件的错误。

完整性表现

关系模型

关系完整性的用于保证数据库中数据的正确性。系统在进行更新、插入或删除等操作时都要检查数据的完整性,核实其约束条件,即关系模型的完整性规则。在关系模型中有四类完整性约束:实体完整性、域完整性、参照完整性和用户定义的完整性,其中实体完整性和参照完整性约束条件,称为关系的两个不变性

实体完整性   

(1)实体完整性(Entity Integrity)。实体完整性指表中行的完整性。主要用于保证操作的数据(记录)非空、唯一且不重复。即实体完整性要求每个关系(表)有且仅有一个主键,每一个主键值必须唯一,而且不允许为“空”(NULL)或重复。

(2)实体完整性规则要求。若属性A是基本关系R的主属性,则属性A不能取空值,即主属性不可为空值。因为主键是数据库的中某一行的唯一标志。如果主键取空值,关系数据库中就会存在不可区分的实体记录。这里NULL不是指0,而是没有值。而对于非主键可以取NULL。这一规则被称为数据库的实体完整性要求。

    实体完整性的定义:如果码为多个列属性,则只能定义为表级约束条件,如果码为单个列属性则可以定义为表级约束条件也可以定义为列级约束条件。

检查方法:检查主码是否唯一,如果主码不唯一则拒绝插入或者修改(2)检查主码的属性值是否为空,如果为空则拒绝操作

参照完整性(Referential Integrity)

    首先看一下什么是外码:

        设F是基本关系R的一个或一组属性,但不是关系R的码。如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外码。

对于参照完整性来说,属于表间规则。对于永久关系的相关表,在更新、插入或删除记录时,如果只改其一,就会影响数据的完整性。如删除父表的某记录后,子表的相应记录未删除,致使这些记录称为孤立记录。对于更新、插入或删除表间数据的完整性,统称为参照完整性。通常,在客观现实中的实体之间存在一定联系,在关系模型中实体及实体间的联系都是以关系进行描述,因此,操作时就可能存在着关系与关系间的关联和引用。在关系数据库中,关系之间的联系是通过公共属性实现的。这个公共属性经常是一个表的主键,同时是另一个表的外键。参照完整性体现在两个方面:实现了表与表之间的联系,外键的取值必须是另一个表的主键的有效值,或是“空”值。

    定义:在CREATE TABLE 中用FOREIGN KEY短语来定义那些列是外码,用REFERENCES指示这些外码参考了哪些列的主码。   

    FOREIGN KEY(NAME) REFERENCES  TABLE_NAME(NAME)

    可能破坏参照完整性的情况


以SC和studnet表为例

参照完整性的违约处理:

    1)拒绝执行(NO ACTION):既然你违规了,我拒绝。

    2)级联操作(CASCADE):有时候拒绝执行是不对的,比如说,我想在想给某个班换个班主任,那么我需要将班级和人员管理级联修改。

    3)设置为空值(SET-NULL):折中操作,但是要注意外码列是否允许空值,如果不允许为空,则该处理无效。

用户定义的完整性

       •用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求

    从属性和元组两方面进行分析:

    1)属性上约束条件的定义:

        列值不允许为空(NOT NULL)

          列值不允许相同(UNIQUE)

            检查列值是否满足一个布尔表达式(CHECK)

    2)属性上的约束条件检查和违约处理

        插入元组或者修改属性的值的时候,RDBMS会根据约束条件检查插入或者更改是否符合要求。如果不符合要求直接拒绝操作

    3)元组上约束条件的定义:

        通过CHECK设置约束条件。即元组级别的限制,此时重点在于不同列属性之间的关系。

    4)元组上约束条件的检查和违约处理

        同属性上的一致,RDBMS会根据约束条件检查,如果不符合要求直接拒绝操作

使用完整性约束命名子句

    我们可以通过完整性约束命名子句来创建完整性约束并标识相关约束以及对相关约束进行操作。
    创建完整性约束命名子句

格式: CONSTRAINT <完整性约束条件名> [PRIMARY KEY短语    |FOREIGN KEY短语    |CHECK短语]

       修改完整性约束命名子句:

    使用ALTER TABLE语句修改表中完整性限制:

ALTER TABLE Student           DROP CONSTRAINT C1;     

 ALTER TABLE Student           ADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999)

域完整性

    域完整性同样是用户完整性的一种,不过通过定义 域来实现。该域中指明了应满足的约束条件。

[例14]建立一个性别域,并声明性别域的取值范围

           CREATE DOMAIN GenderDomainCHAR(2)

           CHECK (VALUE IN ('男','女') );

          这样   对Ssex的说明可以改写为

          Ssex GenderDomain

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,406评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,976评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,302评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,366评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,372评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,457评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,872评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,521评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,717评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,523评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,590评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,299评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,859评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,883评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,127评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,760评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,290评论 2 342

推荐阅读更多精彩内容