全部章节   >>>>


本章目录

2.1 关系模型与数据表

2.1.1 关系模型

2.1.2 数据表

2.2 MySQL 数据类型

2.2.1 MySQL 常见数据类型

2.2.2 使用 Navicat for MySQL 创建数据表结构

2.3 数据完整性约束

2.3.1 数据完整性

2.3.2 实体完整性约束

2.3.3 域完整性

2.4 参照完整性约束

2.4.1 外键

2.4.2 参照完整性定义

2.4.3 设置外键约束实现参照完整性

总结:


2.1 关系模型与数据表

2.1.1 关系模型

关系模型是由若干个关系模式组成的集合,关系模式的实例称为关系,每个关系实际上是一张二维表格。

关系模型用键导航数据,其表格简单。

订单号

客户 ID

下单时间

订单金额

订单状态

DD201805200001

C10001

2018-5-2019:20:03

322.5

商品出库

DD201805220001

C10003

2018-5-229:13:20

530

物流揽收

DD201805220002

C10002

2018-5-2214:42:31

123.56

发往目的地

DD201805260002

C10001

2018-5-2610:13:25

210.2

客户签收

关系数据库是以关系模型为基础的数据库,是一种根据表、元组(记录)以及字段(列)之间的关系进行组织和访问数据的数据库,其通过若干个表来存取数据,并且通过关系将这些表联系在一起。

关系模型中的术语:

  • 关系(Relation)对应通常所说的一张表,如订单表。
  • 元组(Tuple)表中的一行即为一个元组,它可以标识实体集中的一个实体,元组亦可称作“记录(Record)”。表中任意两行(元组)不能相同。
  • 属性(Attribute)表中的一列即为一个属性,给每个属性起一个名称即属性名,属性亦可称作列(Column),表中的属性名(列名)不能相同,每个属性都有值。
  • 主键(Key)表中的某个属性组,它可以唯一确定一个元组,属性组可以有一个或多个属性。
  • 关系模式:对关系的描述,可表示为关系名。

2.1.2 数据表

对于关系型数据库而言,一张表就是一个关系

在数据库中,数据表是数据存储的基本单位,是数据库中最重要、 最基本的操作对象。

数据表被定义为列的集合, 数据在表中是按照行和列的格式来存储的。

每一行代表一条唯一的记录,每一列代表记录中的一个域。

2.2 MySQL 数据类型

2.2.1 MySQL 常见数据类型

类型分类

类型

取值范围或描述

示例

整数类型

tinyint

0 ~255

员工年龄:32

smallint

-32768~32767

员工数:2540

int

-2147483648~2147483647

中国人口数:1354040000

小数类型

decimal

decimal(5,2)表示小数的取值范围是-999.99~999.99

商品单价:892.35

定长字符串类型

char

char(10) 表示字符串存储 10 个字符,即便该字符串只有一个字符, 它所占用的存储空间也是 10 个字符空间大小

公司名:HUAWEI

变长字符串类型

varchar

varchar(10) 表示字符串最多存储10 个字符,如果该字符串仅包含一个字“中”,那么它所占用的存储空间也只是一个字符空间大小。定义 varchar 类型可节省存储空间

公司地址:武汉洪山区珞瑜路 546 路光谷科技会展中心

类型分类

类型

取值范围或描述

示例

日期类型

date

格式:YYYY-MM-DD(年 - 月- 日)取值范围:1000-01-01 ~ 9999-12-31

出生日期:1982-03-24

日期类型

time

格式:HH:MM:SS(时 : 分钟 : 秒)取值范围:-838:59:59 ~ 838:59:59

注意:时间不限当天

早晨上班时间:08:30:00

datetime

格式:YYYY-MM-DD HH:MM:SS

取 值 范 围:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

登 机 时 间:2015-05-1214:35:0

2.2.2 使用 Navicat for MySQL 创建数据表结构

数据库 bus 中公交线路表line

线路号

所属分公司

起点站

终点站

线路长度(km)

车辆数

502

公交六公司

黄州街 108 街坊

桥口码头

23.7

15

503

公交二公司

文馨街文昌街口

沿江大道青岛路口

22.5

20

541

公交三公司

江盛路长江紫都

长丰大道东风村

27.3

17

605

公交三公司

古田二路翠堤春晓

梨园广场

24.4

16

607

公交四公司

园林路钢都花园

玉龙路朱家亭

28.2

19

609

公交五公司

沿河大道桥口码头

南湖公交场站

18.2

14

620

公交二公司

康居五路

汉黄路岱家山

16.2

12

线路表表结构

字段名

lineNo

线路号

varchar

10

company

所属分公司

varchar

20

from_station

起点站

varchar

20

to_station

终点站

varchar

20

miles

线路长度

decimal(3,1)

number

车辆数

smallint

线路号虽然显示为数字,但不宜采用数字类型,只能是字符串类型。因为线路号与身份证号类似,不仅有一定的编码规则,还可能出现字母。

利用 Navicat for MySQL 创建表

使用 Navicat for MySQL 维护数据表结构

2.3 数据完整性约束

2.3.1 数据完整性

为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改以及删除等操作时,DBMS 自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。

数据完整性用于保证数据库中的数据在逻辑上的一致性、正确性和可靠性。

数据完整性主要包含:实体完整性域完整性参照完整性

2.3.2 实体完整性约束

实体完整性规定表的每一行记录在表中是唯一的

实体完整性主要包含主键约束唯一约束

主键约束(Primary Key Constraint)用于唯一识别每一条记录,数据表中具有唯一值的字段可设定为主键字段。

主键选择策略:工程实践所推荐的做法是:新增一个无业务含义的字段作为主键,该字段为整数类型,且字段值自动增长。

线路表主键选择:在线路表中新增一个 int 类型的字段“线路编号(lineID)”,将该字段设置为主键且自动增长。当“线路编号”设置为自动增长时,则每次新增线路的“线路编号”值将从 1 开始,且每次递增 1。

在线路表中设置主键和主键自增长的具体做法如下:

  1. 新增字段“线路编号(lineID)”,设置该字段为 smallint 类型。
  2. 选中字段“lineID”,单击“ ”,即设置“lineID”为主键,并勾选“自动递增”。

每个数据表只能有一个主键。设定为主键的字段内容不能有重复值,且不能为 null 值。

唯一约束(Unique Constraint):如果某个字段满足唯一性约束要求,则可以向该字段添加唯一性约束。

与主键约束相比,唯一约束也用于确保列中不存在重复值,但其列值可以是 null。

在线路表的“lineNo”上设置唯一约束:

主键约束要求列值非空,而唯一键约束允许列值为空。

2.3.3 域完整性

域完整性指给定列输入的有效性,即保证指定列的数据具有正确的数据类型、格式和有效的数据范围。

域完整性主要包含非空约束默认值约束

非空约束(Not Null Constraint):如果某个字段满足非空约束的要求,则应该在字段上设置非空约束。

示例:在线路表“所属公司”设置非空约束,只需在线路表设计窗口中选中“company”,取消勾选“允许空值”即可。

默认值约束(Default Constraint):如果某个字段满足默认值约束的要求,可向该字段添加默认值约束。

示例:在“company”列上设置默认值约束,默认值为“公交二公司”。

2.4 参照完整性约束

2.4.1 外键

在公交管理系统中规定营运车辆都隶属于某个具体的公交线路。因此应在车辆表设计一个字段,该字段与线路表的主键 lineID 的数据类型和长度大小应完全一致,并且值也参照线路表中的主键值。

这种参照其他表中主键的字段称为外键。

2.4.2 参照完整性定义

参照完整性是指通过定义一张表中外键与另一张表中主键之间的引用规则来约束这两张表之间的联系。

参照完整性的目的:

  • 利用关联表之间的制约机制互相参照,控制表间数据的一致性和完整性。这种制约机制会在用户执行插入、修改或删除记录等编辑记录的操作时,发挥其限制作用。参照完整性有效地限制了对表中数据的非法编辑,参照完整性的实质就是不允许在相关数据表中引用那些不存在的记录。

参照完整性相关术语:

  • 从表:含有外键且参照其他表的表,如车辆表。从表亦称作“子表”或“参照表”。
  • 主表:被其他表参照的表,如线路表。主表亦称作“父表”或“被参照表”。
  • 外键:从表中的参照列称为外键,外键名与被参照的主表中的主键数据类型应完全一致,但可以不同名。如车辆表中的字段“线路”。
  • 被参照列:主表中的被参照列通常为主表的主键(也可以为唯一键)。如表的主键 lineID 为被参照列。

(1)参照完整性实现方法:通过定义外键与主键之间的对应关系来实现。

(2)参照完整性作用:保证从表中数据与主表中数据的一致性。当增加、修改或删除数据表中的记录时,可以借助参照完整性来保证相关联表之间数据的一致性。

2.4.3 设置外键约束实现参照完整性

公交车辆表 vehicle 的表结构:

 字段名

说明

类型

长度

约束

vehicleID

车辆编号

int

主键、自动增长

plateNo

车牌号

varchar

10

非空

model

型号

varchar

20

type

类型

varchar

20

普通车、空调车

lineID

线路编号

int

外键,参照 line 表

使用 Navicat for MySQL 在 vehicle 表的 lineID 上设置外键

测试添加从表数据一致性问题

总结:

  • 数据完整性确保数据库中存储的数据正确、有效和相容。
  • 数据完整性包括实体完整性、域完整性和参照完整性。
  • 实体完整性约束包括主键约束和唯一约束。
  • 域完整性约束包括非空约束和默认值约束。
  • 参照完整性是指通过定义一张表中外键与另一张表中主键之间的引用规则来约束这两张表之间的联系。
  • 参照其他表主键或唯一约束列的字段称为外键,外键用于实现参照完整性。包含外键的表称为从表或子表。

MySQL数据操作与查询笔记 • 【第2章 表结构管理】的更多相关文章

  1. MySQL数据操作与查询笔记 • 【目录】

    持续更新中- 我的大学笔记>>> 章节 内容 第1章 MySQL数据操作与查询笔记 • [第1章 MySQL数据库基础] 第2章 MySQL数据操作与查询笔记 • [第2章 表结构管 ...

  2. MySQL数据操作与查询笔记 • 【第3章 DDL 和 DML】

    全部章节   >>>> 本章目录 3.1 使用 DDL 定义数据库表结构 3.1.1 SQL 简介 3.1.2 维护数据库和创建数据表 3.2 使用 DDL 维护数据库表结构 ...

  3. MySQL 数据操作与查询笔记 • 【第1章 MySQL数据库基础】

    全部章节   >>>> 本章目录 1.1 数据库简介 1.1.1 数据和数据库定义 1.1.2 数据库发展阶段 1.1.3 数据库系统组成 1.1.4 关系型数据库 1.2 M ...

  4. MySQL数据操作与查询笔记 • 【第7章 连接查询】

    全部章节   >>>> 本章目录 7.1 内连接查询 7.1.1 交叉连接(笛卡尔积) 7.1.2 内连接查询概要 7.1.3 内连接案例 7.1.4 自然连接 7.2 多表连 ...

  5. MySQL数据操作与查询笔记 • 【第5章 MySQL 函数】

    全部章节   >>>> 本章目录 5.1 数学函数和控制流函数 5.1.1 数学函数 5.1.2 控制流函数 5.2 字符串函数 5.2.1 字符串函数介绍 5.2.2 字符串 ...

  6. MySQL数据操作与查询笔记 • 【第6章 聚合函数和分组查询】

    全部章节   >>>> 本章目录 6.1 sum.max 和 min 聚合函数 6.1.1 聚合函数介绍 6.1.2 sum 函数 6.1.3 max/min 函数 6.2 a ...

  7. MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】

    全部章节   >>>> 本章目录 4.1 select 选择列表 4.1.1 select 基本结构 4.1.2 选择列表 4.2 MySQL 运算符 4.2.1 MySQL ...

  8. 《MySQL数据操作与查询》- 综合项目 - 学生管理系统

    <MySQL数据操作与查询>综合项目需求 一.系统整体功能 维护学生信息.老师信息和成绩信息. 支持按多种条件组合查询学生信息和成绩信息. 二.系统的信息需求 一个班级有一个讲师一个班主任 ...

  9. 《MySQL数据操作与查询》- 综合项目 - 航空售票系统

    Mysql & SqlServer综合项目需求 1.系统整体功能 系统需支持以下功能: 维护客户信息.航班信息和票务信息 支持客户按多种条件组合查询航班信息和票务信息 支持客户根据票务信息订购 ...

随机推荐

  1. jvm的优化

    a) 设置参数,设置jvm的最大内存数 b) 垃圾回收器的选择

  2. Output of C++ Program | Set 4

    Difficulty Level: Rookie Predict the output of below C++ programs. Question 1 1 #include<iostream ...

  3. 移动端(App)项目进行满屏高度的设置

    做移动端App的时候 高度一般会根据页面的元素进行自动设置,不会铺满整个屏幕.通过以下代码实现满屏高度. #app{ width: 100%; height: 100%; position: abso ...

  4. spring Profile 为不同环境提供不同的配置支持

    说明 Profile为在不同环境下使用不同的配置提供了支持(开发环境下的配置和生产环境下的配置肯定是不同的, 例如, 数据库的配置) . 在spring开发中用@Profile 注解使用来选择行配置系 ...

  5. Selenium之Canvas画布操作

    现在有一个场景是需要进入到 Canvas画布中 进行单击操作,现在使用过如下方法 canvas = driver.find_element_by_xpath("//canvas[@id='# ...

  6. ssm中的模糊查询

    1.首先是数据层接口协议 public List<User> looks(String uname); 2.数据层实现 <select id="looks" re ...

  7. 『与善仁』Appium基础 — 20、Appium元素定位

    目录 1.by_id定位 2.by_name定位 3.by_class_name定位 4.by_xpath定位 5.by_accessibility_id定位 6.by_android_uiautom ...

  8. collection库更新1.4.0版本

    collection库更新1.4.0版本 collection库一直在使用中,周末集合github上的反馈以及contributor的修改,更新了1.4.0版本. 这个版本做了几个事情: 增加了三种类 ...

  9. EFK的安装和收集docker容器日志展示

    在用户根目录创建个filebeat.docker.yml文件,文件内容如下 filebeat.config: modules: path: ${path.config}/modules.d/*.yml ...

  10. log4j漏洞的产生原因和解决方案,小白都能看懂!!!!

    核弹级bug Log4j,相信很多人都有所耳闻了,这两天很多读者都在问我关于这个bug的原理等一些问题,今天咱们就专门写一篇文章,一起聊一聊这个核弹级别的bug的产生原理以及怎么防止 产生原因 其实这 ...