MySQL什么是关系_MySQL教程-关系模型

MySQL教程-关系模型

Date 2021-1-22

Author Haihan Gao

什么是关系模型关系模型本质上就是多个存储数据的二维表

表的每一行称为记录

记录是一个逻辑意义上的数据

表的每一列称为字段。同一个表每一行记录拥有若干相同字段

字段定义数据类型:INT,BIGINT,DOUBLE

是否允许为NULL:字段数据不存在,0或空串

不允许为NULL可以简化查询条件,加快查询速度

关系数据库的表之间需要建立一对多,多对一,多对多的关系

关系数据库中,关系通过主键和外键维护

RDBMS(关系数据库管理系统)的特点数据以表格形式出现

每行为各种记录名称

每列为记录名称所对应的数据域

许多行和列形成一张表单

若干表单组成Database

RDBMS术语数据库:关联表的集合

数据表:数据形成的矩阵

列:每一列的数据类型相同

行:一个多元组,其中每一维的数据类型可能相同,可能不同

冗余:存储一个数据的副本,降低性能但是提升安全性

主键一张表中每一行数据称为一个记录,每个记录由多个字段组成

关系表中的约束:一张表中不能有两条重复的记录

不能重复指的是可以通过某个字段唯一区分出不同的记录

这个字段称之为主键

对主键的要求:记录一旦插入表中,主键最好不再被修改

选取主键的基本原则:不使用任何业务相关的字段作为主键

业务无关的字段,称之为id

常见的id类型自增整数

全局唯一的GUID,全局唯一的字符串

使用INT自增作为ID,可能导致溢出的问题

联合主键

两个或多个字段被设置为主键

允许一列重复,只要可以通过多个主键唯一确定记录即可

使得复杂度上升,不建议使用

外键

一对多表-表之间记录建立关系

两个表的关系是一对多的,表示表A的一个记录对应表B的多个记录

找到表B中的某个记录对应的表A中的记录,只需要在表B的记录中加上一列,表示这个记录对应的表A中记录的主键id,有点抽象,可以看这个例子外键

实际上,外键不是通过列名实现的,而是通过外键约束实现的

ALTER TABLE students

ADD CONSTRAINT fk_class_id

FOREIGN KEY (class_id)

REFERENCES classes (id);

做几点说明第二行指定外键约束的名称

第三行指定class_id作为外键

第四行将外键关联到classes表的id列

外键约束还能保证不插入无效的数据,插入的数据需要检查外键是否有效

外键约束的缺点:降低数据库的性能,将class_id视为一个普通的列,应用程序自身检查逻辑的正确性

删除外键约束,通过ALTER TABLE实现

ALTER TABLE students

DROP FOREIGN KEY fk_class_id;

多对多通过两个一对多关系实现的

引入中间表,关联两个一对多关系

一对一一个表中的记录对应另一个表中的唯一记录

student对应contact,在contact表中添加唯一一列student_id

合并两个表?student没有contact

一对一关系存在的另一个原因是存在热数据的问题,一个记录中,某个字段被经常用到,另一些字段用到的概率较小,这样拆分成两个表可以提升查询的效率

比如一个存储用户信息的表user,我们将其拆分成user_info和user_profiles,前者被用到的概率大,这样我们就只用查前面的表就能获得所需信息

索引

对于关系数据库,含有许多条记录,我们为了快速找到某条记录,可以使用索引。

对于一个student表,有如下列id,主键

class_id班级表外键

name

GPA

如果我们要按照GPA列进行查询,可以对GPA列创建索引

ALTER TABLE students

ADD INDEX idx_GPA(GPA);

说明:第二条语句创建了一个名称为idx_GPA,使用GPA列的索引,索引名称是任意的,如果索引有多列,可以在括号中依次写上

ALTER TABLE students

ADD INDEX idx_name_score (name, score);

索引其实是通过一个散列表实现的,只要这个索引的散列性越好,通过这个索引查找记录的效率就越高

对于主键,自动创建主键索引,主键索引保证唯一

索引可以提升查找效率,但是更新删除记录时会导致修改索引,影响更新效率

唯一索引

设计关系数据表的时候,我们往往会遇到一些看上去不会重复的列,比如身份证号,邮箱地址。之前说过这些列不适合作为主键,但是我们可以为这些列添加唯一索引。

添加唯一索引的样例如下

ALTER TABLE students

ADD UNIQUE INDEX uni_name (name);

UNIQUE关键字告诉SQL添加的是唯一索引

也可以对某个列添加唯一约束但是不创建唯一索引

ALTER TABLE students

ADD CONSTRAINT uni_name UNIQUE (name);

在关系数据库中查询的时候,如果有索引,数据库系统就会根据索引来提高查找效率。索引用于数据库查找的优化。

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

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

相关文章

32命令模式(Command Pattern)

耦合与变化: 耦合是软件不能抵御变化灾难的根本性原因。不仅实体对象与实体对象之间存在耦合关系,实体对象与行为操作之间也存在耦合关系。 动机(Mot…

mysql 事务实例_mysql实现事务的提交和回滚实例

mysql创建存储过程的官方语法为:复制代码 代码如下:START TRANSACTION | BEGIN [WORK]COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]SET AUTOCOMMIT {0 | 1}我这里要说明的mysql事务处理多个SQL语句的回滚情况。…

34观察者模式(Observer Pattern)

动机(Motivate):在软件构建 过程中,我们需要为某些对象建立一种“通知依赖关系” --------一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密&#x…

mysql自定义存储过程_MySQL自定义函数、触发器、存储过程

存储过程概念存储过程,是一个数据库对象,类似一个函数。在存储过程中可以使用SQL中的绝大部分内容,并且可以加入编程语言的特性(循环判断分支)。编写好存储过程之后,可以在客户端调用存储过程,存储过程会自动的执行里面…

36中介者模式(Mediator Pattern)

依赖关系的转化: 动机(Motivate): 在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。 在这种情况…

相似理论与模型试验_正交实验下的固液耦合相似材料研究

原标题:基于正交试验的固液耦合相似材料研究摘 要:为了研究矿井突水演化规律,通过正交试验研制出一种能同时满足固体力学与水理性的固液 耦合相似材料,该相似材料以河沙为骨料、水泥和大白粉为胶结剂、液体石蜡和淀粉为调节剂。采用 极差分析…

35解释器模式(Interpreter Pattern)

动机(Motivate): 在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。 在这种情况下,将特定领域的问题表达为某种文法规则下的句子,…

37职责链模式(Chain of Responsibility Pattern)

动机(Motivate): 在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显示指定,将必不可少地带来请求发送者与接受者的紧耦合。 如何使请求的发送者不需要指定具体的接受…

python3中format函数列表_Python3之字符串格式化format函数详解(上)

173.jpg概述在Python3中,字符串格式化操作通过format()方法或者fstring实现。而相比于老版的字符串格式化方式,format()方法拥有更多的功能,操作起来更加方便,可读性也更强。该函数将字符串当成一个模板,通过传入的参数…

38备忘录模式(Memento Pattern)

对象状态的回溯: 对象状态的变化无端,如何回溯/恢复对象在某个点的状态? 动机: 在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够…

python剪切文件如何恢复_用python实现的可以拷贝或剪切一个文件列表中的所有文件...

# coding:utf-8import osimport sysdef cut_and_paste_file(source, destination):source: file path 中文destination: directory pathdef format_path(path):if not os.path.isabs(path):path os.path.join(os.getcwd(), path)return pathdef mk_dir(path):if not os.path.e…

39策略模式(Strategy Pattern)

算法与对象的耦合: 对象可能经常需要使用多种不同的算法,但是如果变化频繁,会将类型变得脆弱... 动机: 在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将…

python选择表单_如何使用Python在表单中选择选项?

下面是一些基本用法示例:>>> import mechanize>>> br mechanize.Browser()>>> br.open(http://www.w3schools.com/html/html_forms.asp)表单有一个name属性;但有时它是空的:>>> [f.name for f in br.fo…

40访问者模式(Visitor Pattern)

类层次结构的变化: 类层次结构中可能经常由于引入新的操作,从而将类型变得脆弱... 动机: 在软件构建过程中,由于需求的改变,某些类层次结构中常常需要增加新的行为(方法),如果直接…

ssh中c3p0连接mysql_ssh 中使用c3p0 的连接池配置 | 学步园

applicationContext.xml 文件:xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:jee"http://www.springframework.org/schema/jee"xsi:schemaLocation"http://www.springframework.org/schema/beans http://www.springframewor…

41状态模式(State Pattern)

对象状态影响对象行为: 对象拥有不同的状态,往往会行使不同的行为... 动机: 在软件构建过程中,某些对象的状态如果改变以及其行为也会随之而发生变化,比如文档处于只读状态,其支…

python中空格属于字符吗_举例说明python中空格是属于字符

python中空格属于字符吗?答案是肯定的,空格在Python中也是属于字符的。案例:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。#!/usr/bin/python# -*- coding: UTF-8 -*-import strings raw_input(input a st…

python如何引发和处理异常_在python3.6中,如何捕捉异常并引发异常以便稍后处理?...

假设我有两个例外:class FooError (Exception):def __init__(self, *args, **kwargs):default_message A foo error has occurred!if not (args or kwargs): args (default_message,)super().__init__(*args, **kwargs)class BarError (Exception):def __init__(s…

2字节十六进制浮点数 qt_Qt之8个字节转化为double小数

首先要理解double的存储方式,具体可查找相关的博客本文实现的是将8个字节(存储为16进制的字符串)转化为对应的double类型double MainWindow::qByteArraytodouble(QString qstr){QByteArray byte;StringToHex(qstr,byte);double result;memcpy(&result, byte.dat…

【转】如何将域中的AD数据导入SharePoint

最近刚装好sharepoint2010,想要研究一下,第一件想做的事就是想把AD中的用户信息导入到SharePoint中。 那现在就来看看我是怎么操作的: 1.打开管理中心 sharepoint是通过“用户配置文件同步服务”来实现同步,所以第一步要开启这个…