精华内容
下载资源
问答
  • 关系数据库完整性

    千次阅读 2017-06-10 22:16:32
    数据库完整性约束用于保证数据的正确性。系统在更新、插入或删除等操作时都要检查数据的完整性,核实其约束条件,即关系模型的完整性规则。关系模型中有四类完整性约束:实体完整性、域完整性、参照完整性和用户定义...

    1.作用
    数据库完整性约束用于保证数据的正确性。系统在更新、插入或删除等操作时都要检查数据的完整性,核实其约束条件,即关系模型的完整性规则。关系模型中有四类完整性约束:实体完整性、域完整性、参照完整性和用户定义完整性,其中实体完整性和参照完整性约束条件,成为关系的两个不变性。
    1.实体完整性
    实体完整性指表中行的完整性。主要用于保证操作的数据(记录)非空、唯一且不重复。即实体完整性要求每个关系表有且仅有一个主键,每个主键值必须唯一,而且不允许为“空”或重复。
    由于主键是实体数据(记录)的惟一标识,若主属性取空值,关系中就会存在不可标识(区分)的实体数据(记录),这与实体的定义矛盾,而对于非主属性可以取空值(NULL),因此,将此规则称为实体完整性规则

    2.域完整性
    域完整性是指数据库表中的列必须满足某种特定的数据类型或约束。其中约束又包括取值范围、精度等。表中的check、foreign key约束和default、not null定义都属于域完整性的范畴。

    3.参照完整性
    参照完整性属于表间规则。对于永久关系的相关表,在更新、插入或者删除记录时,如果只改其一,就会影响数据的完整性。如删除父表的某记录后,子表的相应记录未删除,致使这些记录称为孤立记录。对于更新、插入、删除表间数据的完整性,统称为参照完整性。
    在关系数据库中,关系之间的联系是通过公共属性实现的。这个公共属性经常是一个表的主键,同时是另一个表的外键。参照完整性体现在两个方面:实现了表与表之间的联系,外键的取值必须是另一个表的主键的有效值,或是“空”值。

    4.用户定义完整性
    用户定义完整性是对数据表中字段属性的约束,用户定义完整性规则也称域完整性规则。包括字段的值域、字段类型和字段的有效规则等约束,是由确定关系结构时所定义的字段属性决定的。

    设计阶段
    好的数据库完整设计需要在需求分析阶段确定数据库完整性约束–>概念设计阶段依据需求分析结果转换成一个独立于具体DBMS的概念模型,即实体关系图–>逻辑设计阶段就是将概念结构转换为某个DBMS所支持的数据模型,并对其进行优化,包括对关系模型的规范化。在逻辑结构设计阶段结束时,作为数据库模式一部分的完整性设计也就基本完成了。

    展开全文
  • 适合sqlserver初学者,实验五关系数据库完整性实验源码
  • 关系数据库——关系的完整性约束

    千次阅读 2019-04-09 08:38:38
    介绍关系数据库完整性约束——实体完整性,参照完整性、用户自定义完整性

    引言

    关系模型中有三类完整性约束:实体完整性、参照完整性、用户自定义完整性

    其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称为关系的两个不变性,应该由关系系统自动支持。

    用户定义的完整性约束条件是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。

    实体完整性

    若属性(指一个或者一组属性)A是基本关系R的主属性,则A不能取空值。

    规则说明:

    1. 实体完整性规则是针对基本关系而言的。
    2. 现实世界中的实体是可区分的,即他们具有某种唯一性标识。
    3. 相应地,关系模型中以主码作为唯一标识。
    4. 主码中的属性即主属性不能取空值。如果主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,与第二条相互矛盾,因此,这个规则称为实体完整性规则。

    参照完整性

    外码:设F是基本关系R的一个或者一组属性,但不是关系R的码,K(S)是基本关系S的主码。如果F与K(S)相对应,则称F是R的外码,并称基本关系R为参照关系,基本关系S为被参照关系或是目标关系。

    外码不一定要与相应的主码同名。

    例:

    学生(学号,姓名,性别,专业号,年龄)

    专业(专业号,专业名)

    若属性(或者属性组)F是基本关系R的外码,他与基本关系S的主码K(S)相对应,则对于R中每个元组在F上的取值要么取空值,要么等于S中某个元组的主码值。

    用户自定义完整性

    任何关系型数据库系统都应该支持实体完整性和参照完整性。这是关系模型所要求的。

    除此之外,不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的约束条件就是针对某一具体关系数据库的约束条件,它反映了某一具体应用所涉及的数据必须满足的语义要求。

    例如在学生关系中,要求学生不能没有姓名,学生课程成绩关系中要求成绩必须在0到100之间。

    展开全文
  • 关系完整性是对关系的某种约束,当关系随着时间变化(增删改等操作改变数据库关系表)时应该满足一定的约束条件,通常这些约束条件都依赖于客观事实 关系完整性包含三个方面,分别是 实体完整性 参照完整性 用户...

    关系完整性是对关系的某种约束,当关系随着时间变化(增删改等操作改变数据库关系表)时应该满足一定的约束条件,通常这些约束条件都依赖于客观事实

    关系完整性包含三个方面,分别是

    • 实体完整性
    • 参照完整性
    • 用户自定义完整性

    其中实体完整性和参照完整性是关系模型必须满足的约束条件,或者说是所有数据库管理系统都自动支持的约束条件。而用户自定义完整性则是根据不同的应用程序(不同的使用场景)有选择的设置的一些约束条件

    实体完整性

    实体完整性实际上就是对于主键完整性的约束条件,要求主键不能为空(NULL)。如果主键为空,那么就无法达到唯一标识一个实体的目的了,所以实体完整性应该包含两个约束

    • 不能为NULL
    • 必须唯一,不能重复

    实体完整性在SQL语句中使用PRIMARY KEY关键字定义(实际上就是在定义主键)。有两种定义方式,一种是在定义属性的时候将PRIMARY KEY添加到后面,另一种是在定义完所有属性之后使用关键字PRIMARY KEY指出

    下面的例子创建一个student表,并将学生id设置为主键(用来设置实体完整性约束)

    CREATE TABLE student ( 
        id INT PRIMARY KEY,  /* 紧跟在属性定义后面 */
        name VARCHAR(20) NOT NULL, 
        sex ENUM('male', 'female'), 
        age INT NOT NULL 
    );

    或者

    CREATE TABLE student ( 
        id INT,  
        name VARCHAR(20) NOT NULL, 
        sex ENUM('male', 'female'), 
        age INT NOT NULL ,
        PRIMARY KEY(id) /* 在定义完所有属性后设置主键 */
    );

    另外,考虑另一个表student_course,它存储着所有学生的选课信息,只包含学生id和课程id两个属性,那么根据客观事实可知,想要唯一确定这个表中的某一行,就必须同时提供学生id和课程id,也就是说student_course由(学生id,课程id)这个二元组唯一确定,所以它的主键应该包含两个属性

    需要注意的是,当主键包含多个字段时,只能采用上述第二种方式定义主键,对于student_course的表定义如下

    CREATE TABLE student_course ( 
        student_id INT NOT NULL, 
        course_id INT NOT NULL, 
        PRIMARY KEY(student_id, course_id) /* 在所有属性定义完后定义主键 */
    );

    设置之后,当向student表插入数据时,就必须提供一个独一无二的学生id,任何将学生id设置为NULL或者提供了一个重复的id的操作都会报错

    参照完整性

    参照完整性是相对于外键而言的,在数据库中,外键常用来关联两个表,它的值要么为NULL,要么就是它参照的那个表的主键值。以社交网络系统中的用户实体和分组实体为例,其中

    用户实体定义了一个用户的各种信息,包括

    • 用户id
    • 密码
    • 个人信息等

    好友分组实体定义了一个分组的信息,包括

    • 分组id
    • 分组名
    • 用户id

    这样在查找每个用户的所有分组时只需要将两个表进行联结并且选择用户表的用户id等于分组表的用户id的那几行即可

    在上面的设计中,好友分组包含了用户id,它是用户表的主键,像这样的属性被称为外键,它由FOREIGN KEY … REFERENCES关键字定义

    CREATE TABLE user (
        user_id INT AUTO_INCREMENT PRIMARY KEY,
        password VARCHAR(20) NOT NULL,
    );
    
    CREATE TABLE groups ( 
        group_id INT AUTO_INCREMENT, 
        group_name VARCHAR(20) NOT NULL, 
        user_id INT, 
        PRIMARY KEY(group_id, group_name),
        FOREIGN KEY (user_id) REFERENCES user(user_id) 
        /* 将user_id定为外键,参照user表中的user_id属性 */
    );

    对于外键的约束实际上就是对于参照完整性的约束,对于上面的示例而言,groups表中的user_id字段必须在user表中的user_id字段中存在,也就是不能出现在groups中存在一个user_id它在user中没有的情况

    当对表进行插入删除时,数据库管理系统会自动检测该约束规则,常见的情况有两种

    • 向groups表中插入/更新了一行数据,其中的user_id不是user中的数据,就会报错
    • 将user中的某一行数据删除/更新,而groups中存在将要被删除/更新那一行的user_id的数据,则操作被拒绝,同样会报错

    上述的两种情况被称为发生了不一致,数据库管理系统有以下几种方式可以处理这种问题

    • 拒绝执行(NO ACTION),不允许这种情况发生,一旦发送,则会报错
    • 级联操作(CASCADE),当删除或更新user表导致发生不一致时,会删除或更新groups表将不一致消除
    • 设置为空值,代替级联对groups表的删除和更新操作,将不一致的外键值设置为NULL

    对于级联操作,首先重新定义groups表,为外键user_id设置级联

    CREATE TABLE groups ( 
        group_id INT AUTO_INCREMENT, 
        group_name VARCHAR(20) NOT NULL,
        user_id INT, 
        PRIMARY KEY(group_id, group_name), 
        FOREIGN KEY (user_id) REFERENCES user(user_id) ON DELETE CASCADE 
        /* 表示当user表的某个user_id被删除后,级联删除掉groups表对应数据 */
    );

    然后为两个表添加数据

    mysql> SELECT * FROM user;
    +---------+----------+
    | user_id | password |
    +---------+----------+
    |       1 | 1234567  |
    |       2 | 1234567  |
    |       3 | 1234567  |
    +---------+----------+
    
    mysql> SELECT * FROM groups;
    +----------+------------+---------+
    | group_id | group_name | user_id |
    +----------+------------+---------+
    |        1 | 1_group1   |       1 |
    |        1 | 1_group2   |       1 |
    |        1 | 1_group3   |       1 |
    |        2 | 2_group1   |       2 |
    +----------+------------+---------+

    现在执行删除操作,删除user表中user_id为1的元组,然后查看groups表,发现和user_id相关的数据也全部被删除

    mysql> DELETE FROM user WHERE user_id = 1;
    Query OK, 1 row affected (0.02 sec)
    
    mysql> SELECT * FROM groups;
    +----------+------------+---------+
    | group_id | group_name | user_id |
    +----------+------------+---------+
    |        2 | 2_group1   |       2 |
    +----------+------------+---------+

    用户自定义完整性

    在CREATE TABLE中定义属性时,可以根据应用程序的要求在属性上添加约束条件,即属性限制,包括

    • 列值非空(NOT NULL)
    • 列值唯一(UNIQUE)
    • 检查列值是否满足一个条件表达式(CHECK短语)

    比如上述用户表中的密码password属性,很显然不应该允许用户不设置密码,所以在定义这个属性的时候会加上NOT NULL约束

    对于CHECK短语,它可以定义在单个属性之后,也可以在所有属性定义完成后再定义,如果是后者,那么条件表达式可以使用任意多个属性进行判断

    展开全文
  • 文章目录关系数据库关系操作基本关系操作关系数据库语言的分类关系模型的完整性实体完整性(Entity Integrity)参照完整性(Referential Integrity)用户定义完整性(User-defined Integrity)E-R图向关系模型的转换...

    本人就职于国际知名终端厂商,负责modem芯片研发。
    在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。

    关系数据库

    关系操作

    数据模型的三个方面:

    • 数据结构
    • 数据操作
    • 完整性约束

    基本关系操作

    • 常用的关系操作
      👊查询:选择、投影、连接、除、并、交、差
      👊数据更新:插入、删除、修改
      👊查询的表达能力是其中最主要的部分
      👊选择、投影、并、差、笛卡尔积是5种基本操作

    • 关系操作的特点
      集合操做方式:操作的对象和结果都是集合,一次一集合的方式

    关系数据库语言的分类

    • 关系代数语言
      用对关系的运算来表达查询要求
      代表:ISBL
    • 关系演算语言:用谓词来表达查询要求
      元组关系演算语言:
      🔸 谓词变元的基本对象是元组变量
      🔸 代表:APLHA,QUEL
      域关系演算语言:
      🔸 谓词变元的基本对象是域变量
      🔸 代表:QBE
    • 具有关系代数和关系演算双重特点的语言
      代表:SQL(Structured Query Language)
      🔹 SQL不仅具有丰富的查询功能,而且具有数据定义和数据控制功能,是集查询、DDL(data definition language)、DML(data manipulation language)和DCL(Data Control Language)于一体的关系数据语言。它充分体现了关系数据语言的特点和优点,是关系数据库的标准语言
      🔹 SQL特点:完备的表达能力、非过程化的集合操作、功能强、能嵌入高级语言使用
      在这里插入图片描述
      关系代数、元组关系演算和域关系演算三种语言在表达能力上是完全等价的

    关系模型的完整性

    为了维护数据库中数据与现实世界的一致性,对关系数据库的插入、删除和修改操作必须有一定的约束条件,这就是关系模型的三类完整性:

    • 实体完整性
    • 参照完整性
    • 用户定义的完整性

    实体完整性(Entity Integrity)

    • 实体完整性是指主键的值不能为空或者部分为空
    • 关系模型中的一个元组对应一个实体,一个关系则对应一个实体集
      例如,一条学生记录对应着一个学生,学生关系对应着学生的集合
    • 现实世界中的实体是可区分的,即它们具有某种唯一性标识。与此相对应,关系模型中以主关系键来唯一标识元组
      例如,学生关系中的属性“学号”可以唯一标识一个元组,也可以唯一标识学生实体
    • 如果主键中的值为空或部分为空,即主属性为空,则不符合键的定义条件,不能唯一标识元组及其相对应的实体。这就说明存在不可区分的实体,从而与现实世界中的实体是可以区分的事实相矛盾。因此主键的值不能为空或部分为空
      例如,学生关系中的主键“学号”不能为空;选课关系中的主键“学号+课程号”不能部分为空,即“学号”和“课程号”两个属性都不能为空

    参照完整性(Referential Integrity)

    现实世界中的实体之间往往存在某种联系,在关系模型中实体及实体间的联系都是用关系来描述的。这样就自然存在着关系与关系间的引用。

    例1: 学生(学号,姓名,性别,专业号,年龄)
    专业(专业号,专业名)

    例2: 学生(学号,姓名,性别,专业号,年龄)
    课程(课程号,课程名,学分)
    选课(学号,课程号,成绩)

    • 定义:设F是基本关系R的一个或一组属性,但不是关系R的码,如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外码(Foreign Key),并称基本关系R为参照关系(Referencing Relation),基本关系S为被参照关系(Referenced Relation)或目标关系(Target Relation)

    • 关系R和S不一定是不同的关系

    • 参照完整性规则:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
      ①或者取空值(F的每个属性值均为空值);
      ②或者等于S中某个元组的主码值。

    • 如下图,学生关系中某个学生(如s1或s2)“系别”的取值,必须在参照的系别关系中主关系键“系别”的值中能够找到,否则表示把该学生分配到一个不存在的部门中,显然不符合语义。
      如果某个学生(如s11)“系别”取空值,则表示该学生尚未分配到任何一个系。否则,它只能取专业关系中某个元组的专业号值
      在这里插入图片描述

    • 例如:
      学生(学号,姓名,性别,专业号,年龄)
      课程(课程号,课程名,学分)
      选课(学号,课程号,成绩)

      如果按照参照完整性规则,选课关系中的外部关系键“学号”和“课程号”可以取空值或者取被参照关系中已经存在的值。但由于“学号”和“课程号”是选课关系中主属性,根据实体完整性规则,两个属性都不能为空。所以选课关系中的外部关系键“学号”和“课程号”中只能取被参照关系中已经存在的值

    • 实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作关系的两个不变性。任何关系数据库系统都应该支持这两类完整性

    • 除此之外,不同的关系数据库系统由于应用环境的不同,往往还需要一些特殊的约束条件,这就是用户定义完整性

    用户定义完整性(User-defined Integrity)

    • 用户定义完整性是针对某一具体关系数据库的约束条件
    • 它反映某一具体应用所涉及的数据必须满足的语义要求
      例如,属性值根据实际需要,要具备一些约束条件,如选课关系中成绩不能为负数;某些数据的输入格式要有一些限制等;工资不能低于“地区最低工资”
    • 关系模型应该提供定义和检验这类完整性的机制,以便使用统一的、系统的方法处理它们,而不要由应用程序承担这一功能

    E-R图向关系模型的转换

    • E-R图向关系模型的转换要解决的问题
      ①如何将实体型和实体间的联系转换为关系模式
      ②如何确定这些关系模式的属性和码

    • 转换内容
      将E-R图转换为关系模型:将实体、实体属性和实体之间的联系转换为关系模式。

      实体型间的联系有以下不同情况:
      (1)一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并
      (2)一个1:n联系可以转换为一个独立的关系模型,也可以与n端对应的关系模式合并
      (3)一个m:n联系转换为一个关系模型。例如:“选修”联系是一个m:n联系,可以将它转换为如下关系模式,其中学号与课程号为关系的组合码 👉选修(学号课程号,成绩)
      (4)三个或三个以上实体间的一个多元联系转换为一个关系模式。例如:“讲授”联系是一个三元联系,,可以将它转换为如下关系模式,其中课程号、教工号和书号为关系的组合码👉讲授(课程号教工号书号

    综合练习 E-R图

    用E-R图表示某个工厂物资管理的概念模型

    • 实体
      仓库:仓库号、面积、电话号码
      零件:零件号、名称、规格、单价、描述
      供应商:供应商号、姓名、地址、电话号码、账号
      项目:项目号、预算、开工日期
      职工:职工号、姓名、年龄、职称
    • 实体之间的联系如下:
      (1)一个仓库可以存放多种零件,一种零件可以存放在多个仓库中。仓库和零件具有多对多的联系。用库存量来表示某种零件在某个仓库中的数量;
      (2)一个仓库有多个职工当仓库保管员,一个职工只能在一个仓库工作,仓库和职工之间是一对多的联系。职工实体型中具有一对多的联系;
      (3)职工之间具有领导与被领导关系。及仓库主任领导若干保管员;
      (4)供应商、项目和零件三者之间具有多对多的联系
      在这里插入图片描述
      将E-R图转换为关系模式,并说明外键和主键的对应关系
      供应(供应商号,项目号,零件号,…)
      🔹 (供应商号,项目号,零件号)为主键
      🔹 供应商号是外键与供应商的供应商号对应
      🔹 项目号是外键与项目的主键项目号对应
      🔹 零件号是外键与零件的主键零件号对应
      库存(仓库号,零件号,…)
      🔹 (仓库号,零件号)为主键
      🔹 仓库号是外键与仓库的主键仓库号对应
      🔹 零件号是外键与零件的主键零件号对应
      工作(仓库号,职工号,领导职工号,…)
      🔹 (仓库号,职工号,领导职工号)为主键
      🔹 仓库号是外键与仓库的主键仓库号对应
      🔹 职工号是外键与职工的主键职工号对应
      🔹 领导职工号是外键与职工的主键职工号对应

    关系数据库——关系数据结构及形式化定义
    关系数据库——关系代数


    在这里插入图片描述

    展开全文
  • 数据库完整性

    千次阅读 2014-12-05 17:06:30
    数据库完整性 数据库完整性是指数据库的正确性和相容性,数据的正确性是指数据库的值准确无误,即数据类型必须正确,并且数据的值在规定范围之内 数据的相容性是指数据的存在必须确保表格之间及不同表格数据之间的...
  • 关系数据库完整性规则

    千次阅读 2010-12-29 01:01:00
    不管你用的是SQL Server 还是MySQL 它们都是关系数据库,那么既然是关系数据库就要遵守“关系数据库完整性规则” 关系数据库提供了三类完整性规则,实体完整性规则,参照完整性规则,用户自定义完成性...
  • 关系数据库关系的完整性

    千次阅读 2014-11-14 22:57:39
    1、关系:D1×D2×…×Dn的子集叫做在域D1,D2,…Dn上...其中实体完整性和参照完整性关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持。用户定义的完整性是应用领域需要遵循的约
  • 数据库 - 数据库完整性

    千次阅读 2015-05-06 09:58:40
    数据库完整性数据的正确性和相容性数据的完整性和安全性是两个不同概念 数据的完整性 防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据 防范对象:不合语义的、不正确的数据 数据的安全...
  • 什么是数据库完整性 数据库完整性和安全性的差别 ​​​​​​​ 数据库完整性提供了哪些机制?(DBMS) 实体完整性定义 实体完整性违约处理 ​​​​​​​ ...
  • 数据库完整性约束

    千次阅读 2017-04-05 09:19:17
    介绍数据库完整性
  • 数据库-数据库完整性

    千次阅读 多人点赞 2019-06-29 00:26:10
    数据库完整性 实体完整性 · 定义实体完整性 · 实体完整性检查和违约处理 参照完整性 · 定义参照完整性 · 参照完整性检查和违约处理 用户定义的完整性 · 属性上的约束条件 · 元祖上的约束条件 完整性...
  • 关系数据库完整性(理解)

    千次阅读 2020-06-25 11:22:29
    关系数据库完整性实体完整性参照完整性用户定义完整性 数据库的完整性包括: 数据的正确性(输入正确,存储正确) 数据的相容性 (符合要求、规则) 举个简单的例子: 学生的学号必须唯一, 性别只能是男或女等等...
  • 数据库复习3——数据库完整性

    千次阅读 2015-06-12 16:09:35
    数据库复习3 完整性,完整性约束数据库完整性是指数据库中数据在逻辑上的一致性、正确性、有效性和相容性,那么完整性约束就是指用户插入、修改和删除操作时,DBMS为了保证数据库逻辑上的一致性、正确性、有效性和...
  • 数据库完整性实验报告

    千次阅读 2019-12-03 13:43:39
    实验六 数据库完整性 一、实验学时 2学时 二、实验目的 (1)实现数据完整性的概念及实施数据完整性的重要性。 (2)掌握数据完整性的分类。 (3)掌握完整性约束的添加、删除方法。 (4)掌握通用默认值的...
  • 关系完整性?专门的关系运算?一张图告诉你
  • 数据库完整性5.1 实体完整性5.1.1 实体完整性定义5.1.2 实体完整性检查和违约处理5.2 参照完整性5.2.1 参照完整性定义5.2.2 参照完整性检查和违约处理小结5.3 用户定义的完整性5.3.1 属性上的约束条件不允许取空值列...
  • 关系模型中有3类完整性约束:域完整性、实体完整性、参照完整性。 1.域(列)完整性 也就是用户定义的表字段的完整性 通常指数据的有效性,它包括字段的值域、字段的类型及字段的有效规则等约束,它是由确定关系...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 325,652
精华内容 130,260
关键字:

关系数据库完整性