数据库关系模型

2023-11-13

数据库关系模型和SQL


为例介绍关系模型,以Mysql数据库为例。

安装

MariaDB 安装

1.安装mariadb-server,会自动安装mariadb
>yum install mariadb-server

2.启动服务
>systemctl start mariadb.service

3.开机启动
>systemctl enable mariadb.service

4.为了安全设置mysql服务
>mysql_secure_installation

5.数据库密码登录
>mysql -u root -p

6.导入测试脚本
mysql -uroot -p < test.sql
显示所有数据库
show databases;

创建并授权用户
grant all on *.* to '用户名'@'%' identified by '密码';
flush privileges;

SQL语句

SQL是结构化查询语言Structured Query Language。1987年被ISO组织标准化。
所有主流的关系型数据库都支持SQL,NoSQL也有很大一部分支持SQL。

SQL语句分为

  • DDL 数据定义语言,负责数据库及数据库对象定义,由create(创造),alter(更改),drop(终止)等三种语句组成。
  • DML 数据操作语言,负责对数据库对象的操作,CRUD增删改查。
  • DCL 数据控制语言,负责数据库权限访问控制,由grant(授权),revoke(撤销)两个指令组成。
  • TCL 事务控制语言,负责处理ACID事务,支持commit(提交),rollback(回滚)指令。

语言规范

  • SQL语句大小写不敏感
    • 一般建议,SQL的关键字及函数大写
  • SQL语句末尾应该使用分号结束
  • 注释
    • 多行注释/*message*/
    • 单行注释-- message
    • MySQL 注释可以使用#
  • 使用空格或缩进提高可与读性
  • 命名规范
    • 必须以字母开头
    • 可以使用数字,#,$ 和 _
    • 不可使用关键字

DCL

grant授权,revoke撤销

1.授权 all权限 on employees库的所有表 to qy用户 在任意ip 以*963.为密码来访问
>grant all on employees.* to 'qy'@'%' identified by '*963.';

2.撤销 qy用户 的所有权限 on 所有库
>revoke all on *.* from qy;

符号 * 为通配符,指代任意库或者任意表。*.* 所有库的所有表;employees.*表示employees库下所有的表

% 为通配符,它是SQL语句的通配符,匹配任意长度字符串

DDL

删除用户(慎用)

drop user qy;

创建数据库

库是数据的集合,所有数据按照数据模型组织在数据库中。

create database if not exists test character set utf8mb4 collate utf8mb4_general_ci;
create database if not exists test character set utf8;

character(特性) set 指定字符集。

utf8mb4是utf8的扩展,支持4字节utf8mb4,需要MySQL5.5.3+。
collate(校验)指定字符集的校对规则,用来做字符串的。例如a, A谁大?

删除数据库

drop database if exists test;

创建表

表分为行和列,MySQL是行存数据库。数据是一行行存的,列必须固定多少列。
行row,也称为记录(record),元组。

列column,也称为字段(Field),属性。

字段的取值范围叫做domain(域),例如下图gender字段的取值就是M或F连个值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RPA65tio-1575001748506)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20191128205300123.png)]

create table `employees` (
	`emp_no` int(5) not null,
	`birth_date` date not null,
	`first_name` varchar(15) not null,
	`last_name` varchar(16) not null,
	`gender` enum('M','F') not null,
	`hire_date` date not null,
	PRIMARY KEY('emp_no')
)ENGINE=InnoDB DEFAULT CHARSET=UTF8;

反引号标注的名称,会被认为是非关键字,使用反引号避免冲突。

DESC

查看列信息
{DESCRIBE| DESC} tbl_name [col_name | wild]

desc employees;
desc employees '%name';

练习

设计一张表,记录登录账户的注册信息,应该存储用户的姓名,登录名,密码

drop database if exists login;
create database if not exists login character set utf8mb4 collate utf8mb4_general_ci;
create table `reg`(
`id` int(10) not null,
`loginname` varchar(50) not null,
`name` varchar(20) not null,
`password` varchar(128) not null,
primary key (`id`)
)engine=innodb

关系

上面讲了行(元组,记录),列(字段,元组),字段范围(域)等。

维数:关系的维数指关系中属性的个数
基数:元组的个数

注意在关系中,属性的顺序并不重要,理论上,元组顺序也不重要,但是由于元组顺序与存储相关,会影响查询效率

候选键

关系中,能唯一标识一条元组的属性(列)或属性集合(列的集合),称为候选键。
候选键,表中一列或者多列组成唯一的key, 通过这一个或者多个列能唯一的标识一条记录。
表中可能有多个候选键。

PRIMARY KEY 主键

从候选键中选择出主键。
主键的列不能包含空值null。主键往往设置为整型、长整型,可以为自增AUTO_INCREMENT字段。
表中可以没有主键,但是,一般表设计中, 往往都会有主键,以避免记录重复。
InnoDB的表要求使用主键。

Foreign KEY 外键

当一个关系中的某个属性或属性集合与另一个关系(也可以是自身)的候选键匹配时,就称作这个属性或属性集合是外键。

索引Index

可以看做是一本字典的目录, 为了快速检索用的。空间换时间,显著提高查询效率。
可以对一列或者多列字段设定索引。

主键索引,主键会自动建立主键索引,主键本身就是为了快速定位唯一记录的。
唯一索引,表中的索引列组成的索引必须唯一,但可以为空,非空值必须唯一
普通索引,没有唯一性的要求, 就是建了一个字典的目录而已。
联合索引,多个字段组合创建索引,使用条件查询时,先匹配左边字段
全文索引,MyISAM使用,对Char、Varchar、 TEXT类型使用
空间索引,SPATIAL, 基本不用。
在MySQL中,InnoDB和MyISAM的索引数据结构可以使用Hash或BTree, innodb默认是BTree.
Hash时间复杂度是0(1),但是只能进行精确匹配,也就是Hash值的匹配,比如范围匹配就没办法了,
hash值无序所以无法知道原有记录的顺序。Hash问题较多。
BTree索引,以B+树为存储结构。
虽然,索引可以提高查询所读,但是却影响增删改的效率,因为需要索引更新或重构。频繁出现在
where子句中的列可以考虑使用索引。要避免把性别这种字段设索引。

B+树

img

B+树节点组织成一棵树。节点分为内部节点和叶子节点。

内部节点不存储数据,叶子节点不存储指针。

每个leaf node保存数据,所有的leaf node组织成链表。假设读取16到22的数据,找到18后,顺着链表
往后遍历读取即可。
InnoDB中,数据文件本身就是按主键索引存储的,叶子节点中保存的就是数据记录。
如果在其他字段上定义B+Tree索引,叶子节点的数据记录的是主键,这种称为辅助索引。

约束Constraint(数据库的三大完整性)

为了保证数据的完整性,数据模型还必须支持完整性约束。

“必须有值”约束

某写列的值必须有值,不为null

域约束Domain Constraint(域完整性)

限定了表中字段的取值范围

实体完整性Entity Integrity

PRIMARY KEY 约束定义了主键,就定义了主键约束。 即实体完整性要求每个关系(表)有且仅有一个主键,每一个主键值必须唯一,而且不允许为“空”(NULL)或重复。

引用完整性Referential Integrity

指在外键定义中,可以不是引用另一张表的主键,但是往往实际只会关注引用主键。

外键:在表B中的某列,引用了表A中的主键,表B中的该列就是外键。

A表称为主表,B表称为从表。

插入规则
不需要指定。
如果在表B插入一条记录,B的外键列插入了一个值,这个值必须是表A中存在的主键值。

更新规则
定义外键约束时指定该规则。

删除规则
定义外键约束时指定该规则。

定义外键约束的操作

设定值 说明
CASCADE 级联,从父表删除或更新会自动删除或更新子表中匹配的行
SET NULL 从父表删除或更新行,会设置子表中的外键列为NULL,但必须保证子表列没有指定NOT NULL,也就是说子表的字段可以为NULL才行
RESTRICT 如果从父表删除主键,如果子表引用了,则拒绝对父表的删除或更新操作
NO ACTION 标准SQL的关键字,在MySQL中与RESTRICT相同。拒绝对父表的删除或更新操作

外键约束的目的是为了保证数据完整性、一致性, 杜绝据数冗余(rongyu,多余的或重复的)、数据错误。

实体-联系模型(E-R模型)

数据库建立,需要收集用户需求,设计符合企业要求的数据模型。而构建这种模型需要方法,这种方法需要成为E-R实体-联系建模。也出现了一种建模语言一UML (UnifiedModeling Language)统一建模语言。

实体Entity:现实世界中具有相同属性的一组对象,可以是物理存在的事物或抽象的事物。

联系Relationship:实体之间的关联集合。

实体间联系类型

假设有实体部门,实体员工

类型 描述 解决方案
一对多联系 一个员工属于一个部门,一个部门有多个员工 员工外键;部门主键
多对多联系 一个员工属于多个部门,一个部门有多个员工 建立第三表
一对一 联系 假设有实体管理者,一个管理者管理一个部门, 一个部门只有一个管理者 字段建在哪张表都行

一对一关系用的较少,往往表示表A的一条记录唯一关联表B的一 条记录,反之亦然。
它往往是为了将一张表多列分割并产生成了多张表,合起来是完整的信息,或为了方便查询,或为了数据安全隔离一部分字段的数据等等。

视图

视图,也称虛表,看起来像表。它是由查询语句生成的。可以通过视图进行CRUD操作。

视图的作用

  • 简化操作,将复杂查询SQL语句定义为视图,可以简化查询。
    工 | 建立第三表 |
    | 一对一 联系 | 假设有实体管理者,一个管理者管理一个部门, 一个部门只有一个管理者 | 字段建在哪张表都行 |

一对一关系用的较少,往往表示表A的一条记录唯一关联表B的一 条记录,反之亦然。
它往往是为了将一张表多列分割并产生成了多张表,合起来是完整的信息,或为了方便查询,或为了数据安全隔离一部分字段的数据等等。

视图

视图,也称虛表,看起来像表。它是由查询语句生成的。可以通过视图进行CRUD操作。

视图的作用

  • 简化操作,将复杂查询SQL语句定义为视图,可以简化查询。
  • 数据安全,视图可以只显示真实表的部分列,或计算后的结果,从而隐藏真实表的数据
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据库关系模型 的相关文章

  • Linux—使用readelf工具查看程序代码变量的内存空间布局情况

    1 源程序与程序的映射 BSS段 存放未初始化的全局变量或静态变量 Block Started by Symbol DATA段 存放已初始化的变量 TEXT段 存放二进制代码 2 程序到进程的映射 程序代码区 存放函数体二进制代码 常量区
  • pthread_detach函数

    线程分离状态 指定该状态 线程主动与主控线程断开关系 使用pthread exit或者线程自动结束后 其退出状态不由其他线程获取 而直接自己自动释放 网络 多线程服务器常用 进程若有该机制 将不会产生僵尸进程 僵尸进程的产生主要由于进程死后

随机推荐

  • 隐私合规:收集SDK部分介绍

    SDK信息查询网站 全国SDK管理服务平台 https sdk caict ac cn official home com meizu cloud pushsdk SystemReceiver 魅族推送服务是由魅族公司为开发者提供的消息推送
  • 为什么期货投资70%的亏钱,20%不亏不赚,10%是赚钱?

    在期货市场中 据专业数据统计 有70 的投资者都是亏钱的 有20 的投资者不亏不赚 只有10 的投资者是赚钱的 以下简单总结了几个原因 1 专业度不够 我国的股民一直就有 暴富 的心理 希望能在股市里一夜暴富 但期货市场需要运动的专业知识比
  • spring data jpa 利用@Query进行查询

    介绍 Query注释之前 先看看怎么利用 NamedQuery进行命名查询 1 现在实体类上定义方法已经具体查询语句 Entity NamedQuery name Task findByTaskName query select t fro
  • Python-字符串的世界

    Python字符串的世界 在Python编程中 字符串 String 是一种非常重要的数据类型 用于表示文本信息 字符串可以包含字母 数字 特殊字符以及空格 它们在编程中被广泛用于文本处理 格式化输出 字符串匹配等各种场景 创建字符串 创建
  • PCB是什么?你真的足够了解PCB吗?

    在电子行业有一个关键的部件叫做PCB printed circuit board 印刷电路板 这是一个太基础的部件 导致很多人都很难解释到底什么是PCB 这篇文章将会详细解释PCB的构成 以及在PCB的领域里面常用的一些术语 在接下来的几页
  • C#进行图片压缩(对jpg压缩效果最好)

    直接上代码 1 public static class ImageCompress 2 3
  • 基于5g的交通运输_江苏交通全面开启“5G”加速

    江苏交通全面开启5G加速 2020年4月1日 江苏省交通运输厅 与三大运营商 江苏铁塔公司 签署5G战略合作协议 共推未来交通信息化 数字化 智能化发展 从中国高层的多次部署 到资本市场的资金热捧 近期最受舆论关注的概念之一莫过于 新基建
  • SQLserver中存储过程的应用

    在SQL中 存储过程类似于编程语言的函数 即当创建一个存储过程之后便可以在接下来任何类似的操作是直接调用存储过程 那么我们创建存储过程的优势是什么呢 1 提高性能 存储过程将SQL语句封装在一起 降低了数据传输的成本 减少执行时间 2 提高
  • 虚拟机栈的作用以及特点

    4 虚拟机栈 每个线程运行时所需要的内存 称为虚拟机栈 在jvm里 方法的临时储存是在栈里完成的 每个栈由多个栈帧 Frame 组成 对应着每次方法调用时所占用的内存 每个线程只能有一个活动栈帧 对应着当前正在执行的那个方法 正在运行的方法
  • React Draggable 实现拖拽

    React Draggable 是 react 生态中 最好用的拖拽实现库之一 如果你的应用中需要实现拖拽功能 可以尝试用 react draggable 它可以满足多数情况下的拖拽需求 比如一个弹出设置浮窗 可以相互遮挡的容器之类 在所有
  • 计算机2.0培训心得,信息技术应用能力提升培训心得体会两篇

    信息技术应用能力提升培训心得体会两篇 篇一 本月 我进行了 教师信息技术应用能力提升工程 的学习 学习过程中的每一天我都过得非常充实 这次的培训我学习到了很多 每一个视频的内容都非常有意义 有价值 所以 这段时间 我很认真的学习了此次的培训
  • 搭建Spark所遇过的坑

    一 经验 1 Spark Streaming包含三种计算模式 nonstate stateful window 2 kafka可通过配置文件使用自带的zookeeper集群 3 Spark一切操作归根结底是对RDD的操作 4 部署Spark
  • 2017-03-01-为你的Github生成漂亮的徽章和进度条

    原文来自为你的Github README生成漂亮的徽章和进度条 欢迎去博主的博客体验更好的阅读感受 github上常见的徽章标签和进度条 平时在上github的时候看到别人写的精美的README 我总是感到非常的羡慕 近来我也开始使用mar
  • qml 实现展示本地文件系统

    遍历本地文件 qt 提供了很多种便利类来实现本地的文件系统管理 比如QDirModel和QFileSystemModel qml中又提供了FolderListModel 需要包含Qt labs folderlistmodel 2 0 笔者的
  • 所有能反演SIF的卫星以及下载链接

    转载自科学网张园博客 http blog sciencenet cn blog 3430406 1223659 html 目录 SCIAMACHY GOME 2 GOSAT OCO 系列卫星 轨道碳观察者 TanSat TROPOMI 调研
  • 信息隐藏预测算法之MED

    MED median edge detector 第一次MED算法概念被提出的论文 http www hpl hp com techreports 98 HPL 98 193 pdf 下图为图像矩阵的一部分 用此为例来说明MED预测算法 其
  • 升级windows10

    前言 windows7已经被微软停更了 所以说 有些用户想升级到windows10 这篇文章 将会教你升级windows10 下载windows10最新安装包 有一个网址 建议大家收藏好 windwos10最新版本官网下载 点进去链接 往下
  • Java中泛型 Class<T>、T与Class<?>、 Object类和Class类、 object.getClass() 和 Object.class

    From Java中泛型 Class
  • JavaScript Array 对象

    解释 Array 对象用于在变量中存储多个值 语法 var cars Saab Volvo BMW 第一个数组元素的索引值为 0 第二个索引值为 1 以此类推 数组属性 属性 描述 constructor 返回创建数组对象的原型函数 len
  • 数据库关系模型

    数据库关系模型和SQL 文章目录 数据库关系模型和SQL 安装 SQL语句 DCL DDL 关系 候选键 PRIMARY KEY 主键 Foreign KEY 外键 索引Index B 树 约束Constraint 数据库的三大完整性 域约