数据库设计精要:完整性和范式理论

文章目录

  • 数据的完整性
    • 实体的完整性
      • 主键
    • 域完整性
    • 参照完整性
      • 外键
  • 多表设计/多表理论
    • 一对一和一对多
    • 多对多
  • 数据库的设计范式
    • 第一范式:原子性
    • 第二范式:唯一性
    • 第三范式:不冗余性

数据的完整性

实体的完整性

加主键,保证一个表中每一条数据 和其他条目不同。

主键

实体完整性确保表中的每一行都是唯一的,并且具有唯一的标识符(通常是一个主键)。这意味着在表中不能有重复的行,并且主键字段不能包含NULL值。

主键

在SQL中,主键(Primary Key)是一个或多个字段的组合,用于唯一标识数据库表中的每一行记录。其具备以下特点:

  1. 唯一: 主键的值必须是唯一的,不允许有重复的值。
  2. 非空:主键字段不能包含NULL
  3. 主键可以加快查询速度:主键在创建时会自动建立索引,这有助于提高查询速度。

在一个标准,存储数据的时候,逻辑上我们认为一行数据是一个不可拆分的整体,要求(不是语法要求,是约定俗成的数据库使用规范)每一行数据和另一行不要重复,所以我们在上面的创建表的时候,就给了一个id,准备用它来充当“唯一标识”、

主键的定义:SQL语法 primary key

我们可以给表中的某一列设置为主键,

成为主键之后有两个特点:(1)不允许为null,(2)不允许在表中重复

CREATE TABLE `test`(`id` int  primary key,`name` varchar(255),`gender` char(1)
);-- 或者CREATE TABLE `test`(`id` int,`name` varchar(255),`gender` char(1)primary key(id)
);-- 如果一个表表在创建的时候没有主键,增加主键的sql  -- 使用上:没有任何意义,
-- alter table 表名 add primary key(主键列);
alter table user add primary key (id);-- 联合主键:复合主键(不建议)。这意味着id和name的组合在table_primary3表中表示主键。
CREATE TABLE table_primary3(id INT(11),name VERCHAR(25),job VERCHAR(25),salary FLOAT,PRIMARY KEY(id, name)
);
insert into test values(1, 'zl', '男');	-- 如果有id 1,就会插入报错。

如果要解决正确的步骤就是先查表,看哪个id没有使用,然后插入的时候再插入

-- 使用sql语句解决-- 在创建表时
CREATE TABLE `test`(`id` int  primary key AUTO_INCREMENT,`name` varchar(255),`gender` char(1)
);-- 插入
-- 服务器接收sql语句,插入NULL对应id,发现id为主键,然后看是否自增,如果不是自增就会报错,有自增会选取一个自增值
insert into test values(null, 'zl', '男');

域完整性

设计某些列,类型要合适,范围要合适

储存数据的时候,存储的内容要符合列的类型的设置

参照完整性

在关系型数据库中,一个表的数据可能依赖于另一个表的数据而存在,或者说两个表的数据存在关联,所以我们希望这种关联/参照,具有一致性(要修改的是同步进行变化)。

外键只是保证参照完整性的一种方式

外键

强制绑定两个具有参照的表的字段。

也就是将一个表的外键绑定为另一个表的主键

在对一个表中的键进行修改时,可能会另一个关联表中进行全局扫描,因为要查看在另一个表中是否在使用。并且主键的扫描次数会少,性能高一点,但是外键的查找性能会低很多。

(修改主键值时,数据库需要检查所有关联的外键约束。如果外键列没有索引,会导致全表扫描,性能较差;而主键由于自带唯一索引,查找效率较高。因此,在设计数据库时,应避免频繁修改主键,并为外键创建索引以提高查询性能)

外键是 MySQL 中用于建立和加强两个表数据之间链接的一种约束。下面我来介绍它的使用方法:

创建外键

在创建表时,可以通过以下方式定义外键:

CREATE TABLE 表名(字段1 数据类型,字段2 数据类型,...[CONSTRAINT 外键约束名] FOREIGN KEY (外键字段名) REFERENCES 主表名(主键字段名)
);

举个例子:

CREATE TABLE department (id INT PRIMARY KEY,name VARCHAR(50)
);CREATE TABLE employee (id INT PRIMARY KEY,name VARCHAR(50),department_id INT,FOREIGN KEY (department_id) REFERENCES department(id)
);

删除外键

可以使用 ALTER TABLE 语句来删除外键约束:

ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名;

要留意的是,外键约束名可以通过查看表结构获取,也能在创建外键时自行定义。

外键约束选项

在外键定义中,还能够添加 ON UPDATE 和 ON DELETE 子句,以此来定义当主表中的记录被更新或者删除时,从表应该执行的操作。常见的选项如下:

  • ON DELETE CASCADE:主表记录删除时,从表相关记录自动删除。
  • ON UPDATE CASCADE:主表记录更新时,从表相关记录自动更新。
  • ON DELETE SET NULL:主表记录删除时,从表相关字段设为 NULL(要求该字段允许 NULL 值)。
  • ON UPDATE SET NULL:主表记录更新时,从表相关字段设为 NULL。

示例如下:

CREATE TABLE employee (id INT PRIMARY KEY,name VARCHAR(50),department_id INT,FOREIGN KEY (department_id) REFERENCES department(id)ON DELETE CASCADEON UPDATE CASCADE
);

使用外键的注意事项

  1. 主表和从表的字段数据类型要保持一致。
  2. 主表的字段必须是主键或者具有唯一约束。
  3. InnoDB 存储引擎才支持外键,MyISAM 不支持。
  4. 外键会对数据的插入、更新和删除操作产生影响,可能会导致性能下降。
  5. 要避免出现循环外键约束,不然会造成死锁的情况。

多表设计/多表理论

一对一和一对多

一对一的表很少见,因为在理论上可以合并为一张表。

多对多

多对多的两张表一般需要一个中间对照表来连接两个表之间的关系。

依靠中间表,来将多对多的两张表,进行连接,对应下面就是:学生信息与对照表是一对多的关系,剧本表与对照表是一对多的关系,学生信息表与剧本表是多对多的关系。

数据库的设计范式

第一范式:原子性

第二范式:唯一性

不存在部分依赖(不能是组合唯一,就是使用联合主键)必须为某一列作为主键设置唯一。

第三范式:不冗余性

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

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

相关文章

智能推荐社交分享小程序(websocket即时通讯、协同过滤算法、时间衰减因子模型、热度得分算法)

🎈系统亮点:websocket即时通讯、协同过滤算法、时间衰减因子模型、热度得分算法;一.系统开发工具与环境搭建1.系统设计开发工具后端使用Java编程语言的Spring boot框架项目架构:B/S架构运行环境:win10/win11、jdk17小程…

部署NextCloud AIO + Frp + nginx-proxy-manager内网穿透私有云服务

网络拓扑 假设已有域名为nextcloud.yourhost.com 用户通过域名https访问 -> Nginx -> frps -> frpc -> NextCloud 其中Nginx和frps安装在具有公网IP的服务器上,frpc和NextCloud安装在内网服务器中。 Nginx配置 通过docker安装nginx-proxy-manager 外…

【源力觉醒 创作者计划】文心开源大模型ERNIE-4.5-0.3B-Paddle私有化部署保姆级教程及技术架构探索

一起来轻松玩转文心大模型吧👉一文心大模型免费下载地址: https://ai.gitcode.com/theme/1939325484087291906 前言 2025年6月30日,百度正式开源文心大模型4.5系列(ERNIE 4.5),涵盖10款不同参数规模的模型&#xff0…

大模型面试:如何解决幻觉问题

在大模型面试中回答“如何解决幻觉”问题时,需要展现你对问题本质的理解、技术方案的掌握以及工程实践的洞察。以下是一个结构化的回答框架和关键点,供你参考:回答框架:问题理解 -> 解决方案 -> 总结 1. 明确问题&#xff0…

matlab实现五自由度机械臂阻抗控制下的力跟踪

五自由度机械臂阻抗控制下的力跟踪,可以实现对力的跟踪反馈,基于MATLAB的机器人工具箱 eyebot.m , 767 zuakang_wailiraodong.m , 2568 colormp.mat , 682

excel日志表介绍

在Excel中制作“日志表事物”(可理解为记录事务的日志表格),通常用于系统性追踪事件、任务、操作或数据变化。以下从表格设计、核心要素、制作步骤、函数应用及场景案例等方面详细说明,帮助你高效创建和使用事务日志表。 一、日志…

汽车信息安全 -- SHE密钥更新小细节

之前我们把SHE密钥更新流程做了梳理,汽车信息安全 -- SHE 密钥更新流程 但在实际做SHE Emulation的时候还是发现了问题,例如如果想更新SHE Key ID等于30,会如何影响M1-M5的值呢?。 今天就聊聊关于几家对于SHE Key的管理。 1. N…

Spring Boot配置优先级完全指南:实战解析覆盖规则

一、结论Spring Boot 中,位置越靠后优先级越高,外部配置压倒内部配置,命令行参数拥有最高优先权。案例: 在一次生产事故中,某团队通过 application-prod.properties 将服务端口设为 9000,但某运维人员在启动…

嵌入式数据库sqlite测试程序

继上篇对嵌入式数据库sqlite的移植和注意项,以及使用命令行测试之后,本篇对其进行了更进一步的程序测试,以备近期在项目中使用。测试程序及说明如下:/**************** 相关函数说明 ******************/ /* (1)sqlite3_open的函…

【学习篇】SQL复杂查询学习

要求:能对千万行级别的大表优化读写效率。 难点:如何创建千万行级别的大表 MySQL数据库的高效查询不仅依赖于合理的表结构和索引设计,还需要掌握高级查询技巧和性能优化方法。 数据表与数据表之间关系三种:实体之间关系 多对多…

Sequential Predictive Modeling of Clinical Trial Outcome with Meta-Learning解读

SPOT(Sequential Predictive Modeling of Clinical Trial Outcome with Meta-Learning)模型是用于临床试验结果预测的模型, 借鉴了模型无关元学习(MAML,Model-Agnostic Meta-Learning)的框架,将模型参数分为全局共享参数和任务特定参数,以平衡跨任务泛化与任务内适配:…

优先选择列表而非数组及泛型类型的使用

数组与泛型的核心差异 协变性与不变性 数组采用协变(covariant)类型规则:若Sub是Super的子类型,则数组类型Sub[]也是Super[]的子类型。这种设计允许以下代码通过编译: Object[] objectArray = new Long[1]; // 编译通过 objectArray[0

自动化Prompt生成平台的研发体系设计

一份轻松不啰嗦的自动化Prompt平台研发攻略 📑 目录 一、项目背景二、平台整体架构设计三、核心功能模块解析四、自动化流程设计五、样式与跨平台规范六、总结与展望 一、项目背景 在大模型应用爆发的今天,不写Prompt的工程师,正在变成“写…

[Swarm] 上下文变量 | 接入function功能调用 | Mcp

第3章:上下文变量 欢迎回到swarm! 在前两章中,我们学习了作为对话指挥者的Swarm框架和具备指令与技能的专用AI角色智能体。(智能体就相当于是给用户问题 已经写好了的提示词,在用户提问时自动加入,以此来给用户更好的…

【Unity开发】Unity实现第一人称视角与第三人称视角切换功能

一、效果展示 第三人称视角:固定摄像机,无任何操作 第一人称视角:用户可以通过wsad进行前后左右移动,qe进行上升下降操作 不同视角之间切换会有一个过渡动画,切换第一视角的初始位置始终为原点(0,0,0&am…

2025全球数字经济大会—云智算安全论坛暨第三届“SecGo论坛”成功召开!共筑安全新生态

2025年7月3日,由全球数字经济大会组委会主办,中国信息通信研究院、中国通信标准化协会承办的全球数字经济大会—云智算安全论坛暨第三届“SecGo论坛”在京召开。北京市经济和信息化局副局长顾瑾栩、中国通信标准化协会副理事长兼秘书长代晓慧、中国信通院…

KingbaseES聚焦产品上线:金仓数据库在线体验平台上线,开启数据库实践新征程

KingbaseES聚焦产品上线:金仓数据库在线体验平台上线,开启数据库实践新征程KingbaseES 在线体验平台是为数据库使用者、开发者、架构师及 DBA 打造的轻量化实践平台,无需本地安装数据库环境,通过浏览器即可快速上手,降…

LLMs之DeepSeek:AI模型市场深度分析:DeepSeek的挑战与机遇,模型市场份额、Token经济学与未来发展

LLMs之DeepSeek:AI模型市场深度分析:DeepSeek的挑战与机遇,模型市场份额、Token经济学与未来发展 导读:该文章主要分析了中国大语言模型DeepSeek R1发布150天后的市场表现、Token经济学的影响以及AI模型市场的竞争格局。文章指出&…

服装零售企业跨区域运营难题破解方案

在服装零售行业,本地化业务系统因承载库存、销售等核心数据,成为众多企业的选择。然而对于门店分布广、规模较大的服装销售商而言,总部系统与各地门店的远程连接却面临挑战:员工远程办公效率低、POS机数据同步滞后、跨区域监管难度…

- 思考小记

对于 分布式系统,我还是抱有敬畏之心的,因为其内容过于庞大;我在学习基础编程的时候走过一个最大的弯路就是过度追求技术而忽视了基础编码能力,当时在学习springboot的时候,觉得那些新内容都是那么新奇高大上&#xff…