SQL Server :关系模式的键码与闭包计算

news2024/11/27 23:54:38

在这里插入图片描述

在这里插入图片描述

一、键码的定义

首先我们给出 键码的定义 如下

定义:已知 R<U,F> 是属性集 U 的关系模式,F是属性集 U 上的一组函数依赖,设 K 为 R<U,F> 中的属性或属性组合,若K ⇒ U - K 且 K 的任何真子集都不能决定 U,则 K 为R的键码

然后大家还要记住的一个东西就是【超键码】,它是 “键码的超集” 的简称。

当一个属性集中出现多个键码的时候,就选定其中的一个作为 主键码

  • 包含在任何一个键码中的属性,称为 主属性
  • 不包含在任何一个键码中的属性,称为 非主属性
  • 最简单的情况 —— 单个属性是键码
  • 最极端的情况 —— 整个属性组合是键码,称为 全码(可不是全马哦🏃💦)

例1:考虑关系模式:人(身份证号,姓名,性别,住址,出身年月),且有函数依赖集:

F = {
身份证号 ⇒ (姓名,性别,住址,出身年月),
(姓名,住址)⇒ (身份证号,住址,出身年月)
}
  • 从上面的这个关系模式我们可以看出,如果对于 公安部分 而言,它可以选身份证号作为主键码,用身份证号作为人的唯一标识;
  • 对于 邮电部门 而言,它选(姓名,住址)作为主键码,用姓名和住址作为投递信件的唯一标识
  • 在上面的模式中,身份证号,姓名,住址 这三个为【主属性】,性别,出身年月 为【非主属性】

下面我们再来看一个 全码 的例子

例2:考虑关系模式R(演奏者,作品,听众)

  • 为什么说这个关系模式为全码呢,因为三个属性都可以作为键码,试想
    • 一个演奏者可以演奏多个作品;
    • 一个作品也可以被多个演奏者所演奏
    • 观众也可以欣赏不同演奏者的不同作品
  • 那么这三个属性就都得被定义成为键码了,即 全码

二、闭包的计算

有了【键码】的一些知识后,我们就可以来学习一下 闭包 这个东西了

首先我们来讲讲闭包的基本概念:

假设 A = {A1, A2, A3,…, An}是属性集,F是函数依赖集。属性集A在函数依赖集F下的闭包是这样的属性集X,那么A1A2An ⇒ X是蕴含于F中的函数依赖。此时我们就可以用{A1, A2, An}+ 来表示属性集A1A2…An的闭包

然后我们来看闭包的计算规则:

  1. 属性集X终将成为闭包。首先,将X初始化为{A1, A2, …, An}
  2. 然后,反复检查某个函数依赖B1B2...Bm ⇒ C,使得所有B1B2...Bm 都在属性集X中,但是C不在其中,于是将C加到属性集X中l
  3. 根据需要多次重复步骤2,直到没有属性能加到X中。由于X是只增的,而任何关系的属性数目必然是有限的,因此最终再也没有属性可以加到X中
  4. 最后得到的不能再增加的属性集X就是{A1, A2, …, An}+ 的正确值

看完了闭包的计算规则,我们马上来实战演练一下吧🗡

例3:让我们来考虑一个关系R(A, B, C, D, E, F),其函数依赖集为F = {AB ⇒ C,BC ⇒ AD,D ⇒ E,CF ⇒ B},试计算 {A, B} 的闭包{A, B}+

在这里插入图片描述

例4:已知关系模式R(A, B, C, D),其函数依赖集为F = {AB ⇒ C,C ⇒ D,D ⇒ A},求蕴含于给定函数依赖的所有非平凡函数依赖和键码

在这里插入图片描述

例5:若R(A, B, C, D, E),其函数依赖集为F = {AB ⇒ C, B ⇒ D, D ⇒ E, C ⇒ B},试求关系模式R的键码

在这里插入图片描述
💬 那么通过这三道例题的讲解相信读者一定了解了闭包是如何地去进行计算的

三、总结与提炼

最后我们来总结一下本文所学习的内容📖

  • 首先的话我们学习了 键码的定义,了解到了键码是什么东西。在有这个的基础上,我们又学习了 闭包的计算,清楚计算规则之后,再通过三道例题的详细讲解相信读者一定对这个知识点有了一定的认识

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1266899.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c语言-数据在内存中的存储

文章目录 1. 整数在内存中的存储2. 大小端字节序和字节序判断3. 浮点数在内存中的存储 1. 整数在内存中的存储 1.整数的2进制表示方法有三种&#xff0c;即 原码、反码和补码 2. 三种表示方法均有符号位和数值位两部分&#xff0c;符号位都是用0表示“正”&#xff0c;用1表示“…

【开发实践】使用jstree实现文件结构目录树

一、需求分析 因开发系统的需要&#xff0c;维护服务端导出文件的目录结构。因此&#xff0c;需要利用jstree&#xff0c;实现前端对文件结构目录的展示。 【预期效果】&#xff1a; 二、需求实现 【项目准备】&#xff1a; jstree在线文档&#xff1a;jstree在线文档地址 …

Python基础语法之学习表达式进行符串格式化

Python基础语法之学习表达式进行符串格式化 一、代码二、效果 一、代码 print("11等于%d" % (1 1)) print(f"2/1等于{2 / 1}") print("字符串类型是%s" % type("字符串"))二、效果 坚持追求自己的梦想&#xff0c;即使道路漫长曲折&…

网络和Linux网络_6(应用层)HTTPS协议(加密解密+中间人攻击+证书)

目录 1. HTTPS协议介绍 1.1 加密解密和秘钥的概念 1. 2 为什么要加密 2. 对称加密和非对称加密 2.1 只使用对称加密 2.2 只使用非对称加密 2.3 双方都使用非对称加密 2.4 使用非对称加密对称加密 2.5 中间人攻击MITM 3. 证书的概念和HTTPS的通信方式 3.1 CA认证机构…

手把手教你Autodl平台Qwen-7B-Chat FastApi 部署调用

手把手带你在AutoDL上部署Qwen-7B-Chat FastApi 调用 项目地址&#xff1a;https://github.com/datawhalechina/self-llm.git 如果大家有其他模型想要部署教程&#xff0c;可以来仓库提交issue哦~ 也可以自己提交PR&#xff01; 如果觉得仓库不错的话欢迎star&#xff01;&…

【ASP.NET CORE】.NET 6.0 NET CORE MVC连接SQLSERVER数据库

项目装NuGet包&#xff0c;具体版本如下 在appsettings.json中&#xff0c;添加连接字符串 代码如下&#xff1a; "ConnectionStrings": {"MVCSqlContext": "Serverlocalhost;DatabaseAddress;User IDsa;Passwordsa;TrustServerCertificatetrue&q…

西南科技大学信号与系统A实验三(线性连续时间系统的分析)

一、实验目的 1.掌握用 matlab 分析系统时间响应的方法 2.掌握用 matlab 分析系统频率响应的方法 3.掌握系统零、极点分布与系统稳定性关系 二、实验原理 1. 系统函数 H(s) 系统函数:系统零状态响应的拉氏变换与激励的拉氏变换之比. H(s)=R(s)/E(s) 在 matlab 中可采用…

Vue2或者uniapp 中 使用 iframe 嵌入本地 HTML 页面 并 相互通信。

1.使用 iframe 嵌入本地 HTML 页面&#xff08;以pdfjs为例&#xff09; 在 public 文件夹下新建 static 文件夹&#xff0c;然后将 html 文件及相关引用拷贝到 static 文件夹下 uniapp在src下新建hybrid文件 vue 文件完整代码 <template><div class"wrap&q…

最佳实践| 一文读懂《MongoDB 使用规范及最佳实践》原理

最佳实践| 一文读懂《MongoDB 使用规范及最佳实践》原理 一、MongoDB 使用规范与限制 MongoDB 灵活文档的优势 灵活库/集合命名及字段增减同一字段可存储不同类型数据Json 文档可多层次嵌套文档对于开发而言最自然的表达 MongoDB 灵活文档的烦恼 数据库集合字段名千奇百怪…

notepad++ 插件JSONView安装

1&#xff0c;前提 开发过程中经常需要处理json格式语句&#xff0c;需要对json数据格式化处理&#xff0c;因为使用的是虚拟机内开发&#xff0c;所以没法连接外网&#xff0c;只能在本地电脑下载插件后&#xff0c;然后上传到虚拟机中&#xff0c;进行安装使用。 2&#xf…

鸿蒙(HarmonyOS)应用开发——应用程序入口UIAbility

概述 UIAbility是一种包含用户界面的应用组件&#xff0c;主要用于和用户进行交互 UIAbility是系统调度的单元&#xff0c;为应用提供窗口在其中绘制界面 应用程序的几种交互界面形式 点击桌面图标进入应用 一个应用拉起另一个应用 最近任务列表切回应用 每一个UI Abili…

【蓝桥杯选拔赛真题27】C++近似值 第十三届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析

目录 C/C++近似值 一、题目要求 1、编程实现 2、输入输出 二、算法分析

LeetCode.19删除链表的倒数第N个节点(双指针,基本法)

LeetCode.19删除链表的倒数第N个节点 1.问题描述2.解题思路3.代码 1.问题描述 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#x…

5V摄像机镜头驱动IC GC6208,可用于摄像机,机器人等产品中可替代AN41908

GC6208是一个镜头电机驱动IC摄像机和安全摄像机。该设备集成了一个直流电机驱动器的Iris的PID控制系统&#xff0c;也有两个通道的STM电机驱动器的变焦和对焦控制。 芯片的特点: 内置用于Iris控制器的直流电机驱动器 内置2个STM驱动程序&#xff0c;用于缩放和…

添加通信作者标记、共同作者标记

1 添加通信作者的小信封 添加包&#xff0c;2个小信息长得不太一样选一个用 % \usepackage[misc]{ifsym} \usepackage{marvosym} % 通信小信封 然后在名字后面添加\Letter Ming Li\Letter\textsuperscript{\rm 1}\

海思SD3403,SS928/926,hi3519dv500,hi3516dv500移植yolov7,yolov8(2)

本篇是在海思嵌入式芯片中移植yolov7和yolov8的第二篇。做一个调试的小总结。 目前手上有SS928还有Hi3516dv500两个板子&#xff0c;3519DV500板子还没开始调。Hi3519dv500和3516是同一套SDK&#xff0c;基本上是一样的&#xff0c;算力稍高一点&#xff0c;ARM主频高一点。 我…

Python自动化测试工具selenium使用指南

概述 selenium是网页应用中最流行的自动化测试工具&#xff0c;可以用来做自动化测试或者浏览器爬虫等。官网地址为&#xff1a;selenium。相对于另外一款web自动化测试工具QTP来说有如下优点&#xff1a; 免费开源轻量级&#xff0c;不同语言只需要一个体积很小的依赖包支持…

【性能测试】服务器常用的性能指标总结,一文概全...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 压测过程中&#…

基于docker的onlyoffice使用--运行JavaSpringExample

背景 我之前看到有开源项目很好地集成了onlyoffice&#xff0c;效果要比kkfilepreview好&#xff08;应当说应用场景不太一样&#xff09;。本文是在window10环境&#xff0c;安装完Docker Desktop的基础上运行onlyoffice&#xff0c;并利用官网JavaSpringExample进行了集成。 …

【古月居《ros入门21讲》学习笔记】09_订阅者Subscriber的编程实现

目录 说明&#xff1a; 1. 话题模型 图示 说明 2. 实现过程&#xff08;C&#xff09; 创建订阅者代码&#xff08;C&#xff09; 配置发布者代码编译规则 编译并运行 编译 运行 3. 实现过程&#xff08;Python&#xff09; 创建订阅者代码&#xff08;Python&…