码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【数据库系统概论】关系数据库中的关系完整性


    • 前言
    • 实体完整性
    • 参照完整性
    • 用户定义的完整性
    • SQL Server中常用的完整性约束
    • 感谢 💖

    前言

    按照数据模型的三大要素,关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。本篇文章将介绍这三部分内容中的第三部分即关系完整性。关于前两部分可以参考下面的文章:【数据库系统概论】关系数据库中的关系数据结构、【数据库系统概论】关系数据库中的关系操作。关于数据模型,可以参考这篇文章:【数据库系统概论】数据模型。

    关系完整性是由一组完整性规则来定义的。完整性规则是对关系的某种约束条件。关系模型中有三类完整性:实体完整性、参照完整性和用户定义的完整性。其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性。

    下面分别来介绍这三类完整性。

    实体完整性

    • 实体完整性规则:若属性A(指一个或一组属性)是基本关系R的主属性,则属性A不能取空值。

    所以实体完整性定义了主码的取值规则,即主码必须唯一且非空。一旦我们设置了主码,DBMS就会自动认为主码唯一且非空。

    参照完整性

    • 参照完整性规则:若属性(或属性组)F 是关系R 的外码,它与关系S 的主码相对应(关系R 和S不一定是不同的关系),则对于R 中的每个元组在F 上的值要么等于S 中某个元组的主码值,要么取空值。

    外码是什么呢?假如这里有两个关系:学生(学号,姓名,性别,年龄,专业号)和 专业(专业号,专业名)。“专业号”是专业表的主码但不是学生表的主码,那么“专业号”对学生表来说就是外码。按照参照完整性规则,学生关系中每个元组的“专业号”属性只能取下面两类值:

    • 空值,表示尚未给该学生分配专业。
    • 非空值,这时该值必须是专业关系中某个元组的“专业号”值,即该学生不可能分配到一个不存在的专业中,也即被参照关系“专业”中一定存在一个元组,它的主码值等于该参照关系“学生”中的外码值。

    用户定义的完整性

    用户定义的完整性反映了数据必须满足的现实语义要求。例如,在学生关系中,若按照应用的要求学生不能没有名字,则可以定义学生姓名不能取空值;某个属性(如学生的成绩)的取值范围可以定义在0~100之间等。
    关系模型应该提供定义和检验这类完整性的机制,以便使用统一的系统方法处理它们而不需要由应用程序承担这一功能。
    在早期的关系数据库管理系统中没有提供定义和检验这些完整性的机制,因此需要由应用开发人员在应用系统的程序中进行检查。例如在关于学生成绩,需要在应用程序中对输入的成绩进行判断,看是否在0~100之间,如果在就插入这条记录,如果不在则给出错误信息。

    SQL Server中常用的完整性约束

    • 主码约束:PRIMARY KEY
    • 唯一性约束:UNIQUE
    • 非空值约束:NOT NULL
    • 参照完整性约束(外码约束):FOREIGN KEY......REFERENCES
    • 检查约束:CHIECK()
    • 默认值约束:DEFAULT

    感谢 💖

    好啦,这次的分享就到这里,感谢大家看到这里🤞

  • 相关阅读:
    如何在 Windows 10 上启用和设置 BitLocker 加密
    Vue之ElementUI实现登陆及注册
    TCP MIN_RTO 辩证考
    通过netty把百度地图API获取的地理位置从Android端发送到Java服务器端
    【NLP】使用 NLTK 解析与生成上下文无关文法(Context-free Grammar)
    docker全家桶(基本命令、dockerhub、docker-compose)
    Visual Assist v10.9.2471.0 Crack
    C# 使用ListBox及Picturebox显示所选的任意路径文件夹下的图像
    springBoot集成ClickHouse
    福彩双色球,中巨奖到底有多难? 试试 run 《仿真模拟双色球》代码就晓得了。
  • 原文地址:https://blog.csdn.net/m0_60511809/article/details/133325451
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号