第二章 关系数据库
关系数据库是最重要、应用最广泛的数据库系统。
本章主要关于关系模型的基本概念,即关系模型的数据结构,关系操作和关系的完整性。
关系模型中有三类完整性约束:实体完整性,参照完整性以及用户定义的完整性。前两个约束条件是关系模型必须满足的完整性约束条件,被称为关系的两个不变性,应该由关系系统自动支持,用户定义的完整性是应用领域需要遵守的约束条件,体现了具体领域中的语义约束。
实体完整性:若属性A为基本关系R的主属性,则A不能为空。
参照完整性:
一、数据模型
1、数据模型应满足三方面的要求:
1、基本概念
关系:一个关系通常说是一张表。关系名是唯一的
属性:就是关系中的各列,一列即是一个属性,给每一个属性起一个名称即属性名。列是唯一的。
元组:除了关系的标题栏以外,其他各行统称为元组,元组的各分量分别对应各个属性在该元组上的取值;元组只能出现1次或0次。
关系是元组的集合,在给定的关系中,一个元组不可能出现一次以上。
关系的模式:关系名和关系的属性集称为关系的“模式”,
对关系的描述:关系名(属性1,属性2,……,属性n)
分量:元组中的一个属性值。
域:每一个属性有一个允许的值的集合,称为该属性的‘域’,制定的域通常是一个特定的基本类型。关系的任何元组的每个分量都必须对应列的域中取值。
2、键码约束
超(键)码(super key):一个或者多个属性的集合,这些属性的组合可以使我们在一个关系中唯一的标识一个实体。
候选(键)码(candidate key):任意真子集都不能成为超码的最小超码,一个表中可能存在多个候选码。
注: 候选码也可能是属性的集合。
候选码一定是超码
主(键)码(primary key):数据库设计人员选定的,用于唯一标识该关系元组的一个候选码。
每一个关系有且只有一个主码。通常用较小的属性组合作为主键。
注:(1)每一个关系有且只有一个主码
(2)通常用较小的属性组合作为主键
(3)主码一定是超码
(4)一个关系可以有多个超码,多个候选码,但只能有一个主码。
(5)一个关系中各个元组的主码的分量值一定不同
外键:实际上是表中的一个(或多个)属性,它引用某个其他表(特殊情况下,也可以是外键所在的表)的主键,当然,也可以是候选键,但多数情况下是主键。
3、关系模型的完整性约束
实体完整性:实体完整性是指一个表中的每一行必须是唯一的,即实体是可以唯一区分的 。
若属性A是基本关系R的主键,则属性A不能取空值,另外不能存在属性A上分量相同的元组。
参照完整性:一个表中某列的取值受限于另一个表的取值范围约束的特点就称为参照完整性。在关系数据库中用外键(foreign key,有时也称为外部关键字或外码)来实现参照完整性。
用户自定义的完整性:用户定义的完整性规则是针对某一应用环境的完整性约束条件,他反映了某一具体应用所涉及的数据应满足的要求。在实际系统中,这类完整性规则一般在建立库表的同时进行定义。
4、关系模型的数据操纵
查询、插入、删除、更新
数据操作是集合操作,操作对象和操作结果都是关系,即若干个元组的集合。
存取路径对用户隐蔽,用户只需要去干就行了
5、关系模型的存储结构
表以文件形式存储
有的DBMS一个表对应一个操作系统文件
有的DBMS自己设计文件结构
7、关系模型优点和缺点
优点:A、建立在严格的数学概念的基础上
B、概念单一
C、关系模型的存取路径对用户透明
缺点:A、效率低
B、对用户的查询请求进行优化
C、增加了开发数据库管理系统的难度
##三、数据类型(MySQL)
1、整数
1)Tinyint 1字节
2)Smallint 2个字节
3)Mediumint 3个字节
4)Int 4个字节(常用)
5)Bigint 8个字节
2、浮点数
1)float:单精度4个字节
2)Double:双精度8个字节
3、十进制
Decimal(m,d)
例:amount DECIMAL(6,2);
表示名为amount的列最多可以存储6位数字,其中小数位数为2位;
4、日期
1)date 日期
2)Time 时间值
3)Year 年份值
4)Datetime 混合日期和时间值
5)Timestamp 时间戳
5、文本
1)char:定长字符串
2)varchar:变长字符串
3)tinytext:短文本字符串
4)text:长文本字符
5)mediumtext:中等长度文本数据
6)longtext:极大文本数据
注:char、varchar、text的比较
A、char长度固定,即每条数据占用等长字节空间
适合用在身份证号、手机号码等
B、Varchar可变长度,可以设置最大长度
适合用在长度可变的属性
C、Text当不知道属性的最大长度时,适合用text
D、按查询速度:char最快、varchar次之,text最慢
##四、创建数据库 create database
1、创建数据库
create database 数据库名
例如:CREATE DATABASE if not exists mytest ;
CHARACTER SET = utf8; 设置字符集
COLLATE = utf8_general_ci; 排序规则为 utf8_general_ci。
2、删除数据库
DROP DATABASE 数据库名
例如:DROP DATABASE IF EXISTS mytest;
##五、表的定义
1、简单表的定义
Create table 表名
(<列名1> <列数据类型> [列完整性约束],
<列名2> <列数据类型> [列完整性约束],
……
[表级完整性约束]);
2、学生数据库的创建完整示例
```sql
create table 专业(
专业编号 char(10) not null primary key,
专业名称 varchar(50),
级别 char(6),
学制 int default 4
);
create table 课程(
课程编号 char(10) not null primary key,
课程名称 varchar(50),
理论学时 int check(理论学时>=0),
实验学时 int check(实验学时>=0),
开课学期 int ,
课程性质课程介绍 varchar(200)
);
create table 班级(
班级编号 char(10) not null primary key,
班级名称 varchar(50) unique,
专业编号 char(10) references 专业(专业编号),
入学年份 int year(now()
);
create table 教师(
教师编号 char(10) not null primary key,
教师姓名 varchar(10),
性别 char(1) check(性别='女' or 性别='男' ),
职称 char(6),
政治面貌 varchar(10),
简介 varchar(200),
生日 datetime,
所在教研室 varchar(50)
);
create table 学生(
学号 char(10) not null primary key,
姓名 varchar(10),
性别 char(1) check(性别='女' or 性别='男' ),
生日 datetime,
班级 char(10) references 班级(班级编号),
政治面貌 varchar(10)
);
create table 开课计划(
开课计划编号 char(10) not null primary key,
课程编号 char(10) references 课程(课程编号),
教师编号 char(10) references 教师(教师编号),
学期 char(9) check(学期 regexp '^ [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][1-2]%') ,
unique (课程编号,教师编号,学期)
);
create table 选课表(
学号 char(10) references 学生(学号),
开课计划编号 char(10) references 开课计划(开课计划编号),
成绩 int check(成绩>=0 and 成绩<=100) ,
constraint pkofxuanke primary key (学号,开课计划编号)
);
3、属性组做外码
4、自定义约束
5、修改、删除表
Alter table 表名
ADD 列名 列的类型 null(默认的);
Drop Column 列名
6、其他
```sql
```sql
CREATE TABLE users
(
uid INT AUTO_INCREMENT PRIMARY KEY,
username CHAR(10)
) [AUTO_INCREMENT=1000];
解释:
AUTO_INCREMENT:自增长,默认起始编号从1开始,步长为1。
AUTO_INCREMENT:设置默认的起始值。
第二章 关系数据库
关系数据库是最重要、应用最广泛的数据库系统。
本章主要关于关系模型的基本概念,即关系模型的数据结构,关系操作和关系的完整性。
关系模型中有三类完整性约束:实体完整性,参照完整性以及用户定义的完整性。前两个约束条件是关系模型必须满足的完整性约束条件,被称为关系的两个不变性,应该由关系系统自动支持,用户定义的完整性是应用领域需要遵守的约束条件,体现了具体领域中的语义约束。
实体完整性:若属性A为基本关系R的主属性,则A不能为空。
参照完整性:
转载于:https://www.cnblogs.com/Cheryl06/p/7300636.html
mysql完整性约束约束条件与数据类型的宽度一样,都是可选参数作用: 用于保证数据的完整性和一致性主要分为:primary key外键如何找出两张表之间的关系因为有foreign key 的约束,使得两张表形成了三种关系:多对一多对多一对一如何找出两张表之间的关系:例:(1) 书和出版社一对多(或多对一) : 一个出版社可以出版多本书解题:create table press(id int primary key auto_increment,name varchar(20));create table book(id int primary key auto_increment,name varchar(20),press_id int not null,constraint fk_book_press foreign key(press_id) references press(id)on delete cascadeon update cascade);# 先往被关联表中插入记录insert into press(name) values('北京工业地雷出版社'),('人民音乐不好听出版社'),('知识产权没有用出版社');# 再往关联表中插入记录insert into book(name,press_id) values('九阳神功',1),('九阴真经',2),('九阴白骨爪',2),('独孤九剑',3),('降龙十巴掌',2),('葵花宝典',3);查询结果:mysql> select * from book;+----+-----------------+----------+| id | name | press_id |+----+-----------------+----------+| 1 | 九阳神功 | 1 || 2 | 九阴真经 | 2 || 3 | 九阴白骨爪 | 2 || 4 | 独孤九剑 | 3 || 5 | 降龙十巴掌 | 2 || 6 | 葵花宝典 | 3 |+----+-----------------+----------+rows in set (0.00 sec)mysql> select * from press;+----+--------------------------------+| id | name |+----+--------------------------------+| 1 | 北京工业地雷出版社 || 2 | 人民音乐不好听出版社 || 3 | 知识产权没有用出版社 |+----+--------------------------------+rows in set (0.00 sec)书和出版社(多对一)例:(2) 作者和书籍的关系多对多: 一个作者可以写多本书,一本书也可以有多个作者,双向的一对多,即多对多解题:# 创建被关联表author表,之前的book表在讲多对一的关系已创建create table author(id int primary key auto_increment,name varchar(20));#这张表就存放了author表和book表的关系,即查询二者的关系查这表就可以了create table author2book(id int not null unique auto_increment,author_id int not null,book_id int not null,constraint fk_author foreign key(author_id) references author(id)on delete cascadeon update cascade,constraint fk_book foreign key(book_id) references book(id)on delete cascadeon update cascade,primary key(author_id,book_id));#插入四个作者,id依次排开insert into author(name) values('egon'),('alex'),('wusir'),('yuanhao');# 每个作者的代表作egon: 九阳神功、九阴真经、九阴白骨爪、独孤九剑、降龙十巴掌、葵花宝典alex: 九阳神功、葵花宝典wusir:独孤九剑、降龙十巴掌、葵花宝典yuanhao:九阳神功# 在author2book表中插入相应的数据insert into author2book(author_id,book_id) values(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(2,1),(2,6),(3,4),(3,5),(3,6),(4,1);# 现在就可以查author2book对应的作者和书的关系了mysql> select * from author2book;+----+-----------+---------+| id | author_id | book_id |+----+-----------+---------+| 1 | 1 | 1 || 2 | 1 | 2 || 3 | 1 | 3 || 4 | 1 | 4 || 5 | 1 | 5 || 6 | 1 | 6 || 7 | 2 | 1 || 8 | 2 | 6 || 9 | 3 | 4 || 10 | 3 | 5 || 11 | 3 | 6 || 12 | 4 | 1 |+----+-----------+---------+rows in set (0.00 sec)作者与书籍关系(多对多)例;(3) 用户和博客一对一: 一个用户只能注册一个博客,即一对一的关系关联方式: foreign key+unique解题:#例如: 一个用户只能注册一个博客#两张表: 用户表 (user)和 博客表(blog)# 创建用户表create table user(id int primary key auto_increment,name varchar(20));# 创建博客表create table blog(id int primary key auto_increment,url varchar(100),user_id int unique,constraint fk_user foreign key(user_id) references user(id)on delete cascadeon update cascade);#插入用户表中的记录insert into user(name) values('alex'),('wusir'),('egon'),('xiaoma');# 插入博客表的记录insert into blog(url,user_id) values;# 查询wusir的博客地址select url from blog where user_id=2;用户和博客(一对一)转载于:https://www.cnblogs.com/hdy19951010/p/10447037.html
大家好,我是一只学弱狗,记录学习的点点滴滴!
优质文章
再学习之前,为了使你有更深的理解,请回顾之前所学,我是这样对你说的,我也是这样做的,并且真的可以事半功倍。上节我们说了,关系模式由三部分组成,一是以表的形式组织数据,二是表与表之间所发生的操作,三是约束条件,即实体完整性、参照完整性和用户自定义完整性,关于第二点,上次我们说了他主要分为两大类,即基于集合的关系代数和基于元组或域的关系演算,在本节我们将详细讲解基于集合的关系代数,下节将讲解基于元组和域的关系演算,通过这两节的学习,你对数据库的了解将更上一层楼。
指两个关系R和S在做某些关系代数操作之前,如并、差、交等,相关属性之间要有一定的对应性、可比性或意义关联性。
例子
定义:若关系R和S是并相容的,则关系R与S的并运算结果也是一个关系,它由或者出现在关系R中,或者出现在S中的元组构成,在合并时去掉重复元组。
定义:假设关系R和S是并相容的,则关系R与关系S的差运算结果也是一个关系,由出现在关系R中但不出现在关系S中的元组构成。
定义:关系R与S的广义笛卡尔积(简称广义积)运算结果也是一个关系,记作:R×S,它由关系R中的元组与关系S的元组进行所有可能的拼接(或串接)构成。
定义:给定一个关系R、同时给定一个选择的条件condition,选择运算结果也是一个关系,它从关系R中选择出满足给定条件condition的元组构成。
定义:给定一个关系R,投影运算结果也是一个关系,从关系R中选出属性包含在A中的列构成。
投影操作从给定关系中选出某些列组成新的关系,而选择操作是从给定关系中选出某些行组成新的关系
定义:假设关系R和S是并相容的,则关系R与S的交运算结果也是一个关系,它由同时出现在关系R和关系S中的元组构成。交运算可以通过差运算来实现。R∩S=R-(R-S)=S-(S-R)。
注意:以上例子为方便大家理解,先使用笛卡尔积然后再进行选择来得到θ连接结果,但是当引入连接操作后,DBMS可直接进行连接操作,而不必先形成笛卡尔积。
给定关系R(A1,A2,…,An)为n度关系,关系S(B1,B2,…,Bn)为m度关系,如果可以进行关系R与关系S的除运算,当且仅当:属性集{B1,B2,…,Bn}是属性集 {A1,A2,…,An}的真子集,即m<n。
定义:关系R和关系S的除运算结果也是一个关系,记作R÷S,分两部分来定义。
两个关系R与S进行连接时,如果关系R中的元组在S中找不到相匹配的元组,则为了避免该元组信息丢失,从而将该元组与S中假定存在的全为空值的元组形成连接,放置到结果关系中,这种连接称之为外连接。
θ自身连接
自然连接与等值连接
除运算的数学描述
例子
外连接