图片 3

数据库知识点总计,数据库系统概念读书笔记

更新可能使数据处于不一致的状态,即两个联系中应该具有相同值的属性具有了不同的值

7.2 约束

用户定义完整性

 

7.1 实体-联系(entity relationship, E-R)

实体-联系数据模型的提出旨在方便数据库的设计,它是通过允许定义代表数据库全局逻辑结构的企业模式实现的。

E-R数据模型采用了三个基本概念:

  • 实体集
  • 联系集
  • 属性集

E-R模型的相关图形表示是E-R图。

实体(entity)是现实世界中可区别所有其他对象的一个“事务”或“对象”。实体集(entity
set)
是相同类型即具有相同性质(或属性)的一个实体集合。

实体通过属性(attibute)来表示。属性是实体集中每个成员所拥有的描述性性质。每个实体的每个属性都有一个值。

属性分为简单(simple)属性复合(composite)属性。简单属性不可再划分为更小的部分。复合属性可以再划分为更小的部分。

属性也可以被分为单值属性多值属性

联系(relationship)是指多个实体间的相互关联。联系集(relationship
set)。实体集间的关联称为参与(participate)

授权与收回

  • 授权语句

GRANT SELECT ON Students TO PUBLIC;

GRANT ALL PRIVILEGES ON Students TO U1;

GRANT ALL PRIVILEGES ON Students,Courses TO U1,U2 WITH GRANT OPTION;

GRANT INSERT,UPDATE(Grade) ON TABLE SC TO U3;

  • 收回权限

REVOKE <权限列表> ON <对象名> FROM <用户/角色列表>
{CASCADE|RESTRICT}

联系是多个实体间的相互关联

6.1.1 函数依赖

数据依赖是一个关系内部属性与属性之间的一种约束关系。这种约束关系是通过属性间值的相等与否体现出来的数据间相关联系。数据依赖包括:函数依赖(Functional
Dependency, FD)和多值依赖(Multi-Value Dependency, MVD)。

函数依赖非常普遍,我们可以用y=f(x)来表示。当x确定的时候,y也就确定。那么我们称y函数依赖于x,记作:
x->y

比如: 对于关系r(id, name, dept_name,
address)。根据id可以确定唯一的一个人。那么显而易见: id->name,
id->dept_name, id->address

定义1
设R(U)是属性集U上的关系模式,X,Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y或Y函数依赖于X,记作X
-> Y (参照前面的y=f(x))。

下面介绍一些术语和记号:

  • X->Y, 但Y⊈X,则称X->Y是非平凡的函数依赖
  • X->Y,
    但Y⊆X,则称X->Y是平凡的函数依赖。(对任何非空集都成立,因为X真包含Y)
  • 若X->Y,则X称为这个函数依赖的决定属性组,也称决定因素(determinant)。
  • 若X->Y, Y->X,则记作X<–>Y.
  • 若Y不依赖于X,则记作Y↛X.

定义2
 在R(U)中,如果X->Y,并且对与X的任何一个真子集X’,都有X’↛Y,则称Y对X完全函数依赖,记作X->FY.
(每一个y=f(x),这种映射是一一对应)

    若X->Y, 但Y不完全函数依赖于X,则称Y对X部分依赖(partial
functional dependency),记作:X->PY.

注意:完全依赖和不完全依赖两个符号有问题,F和P是在->正上面,请搜一下。

视图的作用

  1. 使用视图可以使一些查询表达更加简洁
  2. 视图提供了一定程度的逻辑独立性
  3. 视图的安全保护作用
  4. 视图使得用户能够以不同角度看待相同的数据

图片 1

6.1.2 码(后面我都称作键)

定义4
设K为R(U,F)的属性或属性组合,若K->FU,则K为R的候选键(Candidate
Key).
如果U部分依赖于K,即K->PU,则称K为超键(Superkey)。候选键是最小的超键,即K的任意一个真子集都不能成为一个候选键。

若候选键多于一个,则选取其中一个为主键(Primary
Key)。否则主键就是候选键。

包含在任何一个候选键中的属性成为主属性(prime
attribute);其他的称为非主属性(nonprime
attribute)。最极端的情况是,整个属性组都是主属性,成为全键(all-key)。

后面,把主键或者候选键简称为键。

定义5
关系模式R中属性或属性组X并非R的键,但X是另一个关系模式的键,则称X是R的外键(Foreign
Key).

基本概念

  • 实体和属性

实体是客观存在并且可以相互区分的任何事物
属性是实体所代表事物具有的某种特性
每个属性都有一定的取值范围,成为该属性的值域

  • 实体集和码

实体集是具有相同属性的实体的集合
实体的值是该实体诸属性值的列表
实体集的值是该实体集中所有实体值的集合
其值可以唯一确定实体集中每个实体的属性集称为该实体集的超码
那些其真子集都不是超码的极小超码称为候选码
主码是数据库设计者选中的,是用来区分同一实体集中不同实体的候选码

  • 属性分类

属性大部分都是简单的不能划分成更小的结构单值的只能取单个值基本的不能由其他属性推导出
复合属性与简单属性对应是可以划分成更小部分的属性
多值属性对应单值属性是特定的实体在该属性上可以取多个值的属性
派生属性对应基本属性的值可以从其他相关属性或实体计算得到,因此又称为计算属性

  • 联系与联系集

联系是多个实体之间的相互关系
联系集是相同的类型联系的集合
实体在联系中的作用称为实体的角色

  • 联系的类型

联系的类型又称为联系的函数性映射函数
一对一联系E2与E1中的每个实体最多与另一个实体集中的一个相互关联
一对多联系(1:n联系)
多对一联系(n:1联系)
多对多联系(m:n联系)

  • 实体集与参与类型

如果实体集中的每个实体都必须参与联系R,则称实体集对联系R的参与是强制的,或全部参与,否则是随意的,或部分参与

  • 联系的属性

联系也可以包含属性,这种情况多出现在多对多联系中

 

7.2.1 映射基数(mapping cardinality)

映射基数或基数比率,表示一个实体通过一个联系能关联的实体的个数。

对于实体集A和B之间的二元联系集R来说,映射基数必然是以下情况之一:

  • 一对一(one-to-one)。A中的一个实体至多与B中的一个实体相关联,并且B中的一个实体也至多与A中的一个实体相关联。
  • 一对多(one-to-many)。A中一个实体可以与B中任意数目(零个或多个)实体相关联,而B中的一个实体至多与A中的一个实体相关联。
  • 多对一(many-to-one)。A中一个实体至多与B中的一个实体相关联,而B中的一个实体可以与A中任意数目(零个或多个)实体相关联。
  • 多对多(many-to-many)。A中的一个实体可以与B中的任意数目实体相关联,B中的一个实体可以与A中的任意数目实体相关联。

关系数据库结构

  • 关系

是具有相同类型的值的集合,域中的元素个数为该域的基数,记作|D|
n个域的笛卡尔集的每个元素称为一个n-元组(简称元组),第i个元素为第i个分量
基数为|D1| * |D2| * … * |Dn|
域上的关系是笛卡尔积的任意字集
在关系数据库中,关系通常用关系名命名,并被看作一个二维表
表的每一列对应于一个分量。列通常是命名的,称为属性
表的第一行是表头,给出各列的属性名
关系的每一个属性都必须是原子的

  • 关系模式

粗略的说,关系模式概念对应于程序设计语言中的类型概念,它是型,定义关系的结构
我们把关系模式简记为R(A1,A2,...,An)R是关系名,A是属性名
关系的型用关系模式刻画,关系的值即关系在某一时刻的快照,又称为关系实例
关系数据库模式由若干域的定义和一组定义在这些域上的关系模式组成
关系数据库的值就是这些关系模式对应的关系在某一时刻的值

  • 关系的码

主码用于表示由多个码中选出的作为唯一识别关系元组的码,而所有的码又称候选码。码中的属性称为主属性,不在任何码中的属性称为非主属性

 

6.2 第一范式 (First Normal Form, 1NF)

关系数据库中的设计是要满足一定要求的,满足不同程度要求的为不同范式

一个低一级范式的关系模式通过模式分解(schema
decomposition)可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化(Normalization)。

各范式之间:5NF⊂4NF⊂3NF⊂2NF⊂1NF

对于关系模式R,一个域是原子的,如果该域的元素被认为是不可分割的单元。我们称一个关系模式R属于第一范式
R∈1NF。

组合单元由不可分割单元或组合单元构成。比如street, city, provice 和
zipcode是不可分的,但是包含了这些属性的Address是可分的,是组合单元。

其他安全措施

  1. 审计技术
  2. 数据加密

n元关系可以分解成为二元关系,但是会出现关系描述不准确的情况

6.4 第三范式 (Third Normal Form, 3NF)

设关系模式R<U,F>∈1NF,若R中不存在这样的键X,属性组Y及非主属性Z(Z⊉Y)是的X->Y,
Y->Z成立,Y↛X,则称R<U,F>∈3NF。

关系数据模型

实体是现实世界中可区别于其他对象的“事件”或“物体”

函数依赖和码

视图

映射基数

7.4 转化为SQL语句:

下面是前一节MySQL Workbench导出的SQL:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ;
USE `mydb` ;

-- -----------------------------------------------------
-- Table `mydb`.`instructor`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`instructor` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NOT NULL,
  `salary` INT NULL,
  PRIMARY KEY (`ID`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`student`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`student` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NOT NULL,
  `tot_cred` INT NULL,
  `instructor_ID` INT NOT NULL,
  PRIMARY KEY (`ID`),
  INDEX `fk_student_instructor_idx` (`instructor_ID` ASC),
  CONSTRAINT `fk_student_instructor`
    FOREIGN KEY (`instructor_ID`)
    REFERENCES `mydb`.`instructor` (`ID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

[er_stud_cardinality]:https://upload-images.jianshu.io/upload\_images/11086962-2a904c3849dc7330.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

实体完整性

  1. 每个关系应该有一个主码,每个元组的主码值唯一确定该元组
  2. 主码的任何属性都不能取空值

 

7.2.2 参与约束

如果实体集E中的每个实体都参与到联系集R中的至少一个联系中,实体集E在联系集R中的参与称为全部的(total)。如果E中只有部分实体参与到联系集R中,则<称实体集E在联系集R中的参与是部分的(partial)。

安全性概述

  • 数据库安全保护的多层面
  1. 物理层
  2. 人际层
  3. 网络层
  4. 数据库系统层
  5. 操作系统层
  • 数据库安全保护的任务
  1. 未经授权读区数据(窃取信息)
  2. 未经授权修改数据
  3. 未经授权删除数据

保护数据设计以下几个任务

  1. 防止对数据的未经过授权的存取,确保敏感信息没有被不“需要知道”这些信息的人访问的到
  2. 防止未经过授权的人员删除和修改数据
  3. 监视对数据的访问和更改等使用情况

 

数据库基础Database4-数据库设计

基于视图的更新

所有视图都是直接或间接由基本表定义的。基于视图的更新最终要转换成对定义视图的基本表的更新。并不是所有视图都可以更新。(●’◡’●)

 

7.3 实体联系图

举个例子:

实体集:(主键用下划线标出)

instructor(<u>ID</u>, name, salary)

student(<u>ID</u>, name, tot_cred)

属性集:

advisor:关联教师和学生

分别用一对一、一对多、多对多来表示:

图片 2

er_stud

《数据库系统概念》中用的是箭头。有的用的是数字(比如维基百科)。有不同的表示方法.

映射基数:

![er_stud_cardinality]

advisor左边0..*表示,每个instructor对应0个或多个学生。advisor右边1..1表示每个学生对应1个(最少1个,最大1个)教师。
这个图还表示了,student在advisor中的参与是完全的。、

下面是用MySQL Workbench根据上面副图(映射基数)来画的:

图片 3

workbench_er_stud

黄色的是主键。student中instructor_ID是外键,引用instructor的主键ID。

基本E-R图的转换

  • 属性处理
  1. 派生属性:忽略
  2. 复合属性:忽略复合属性本省,直接考虑它的成分属性
  3. 多值属性:

如果多值属性m是实体集E的属性,k是E的主码,则关系Rm的属性由m和K组成
多主码时由m和K1、K2…Kn组成

  • 将基本E-R图转换成关系模式
  1. 每个强实体集用一个关系表示
  2. 每个弱实体集用一个关系表示
  3. 每个集合用一个关系表示,但是若实体集于其标识实体集之间的存在依赖联系将被忽略
  4. 如果两个关系具有相同的码,则可以合并它们

如果实体集E中的每一个实体都参与到联系集R的至少一个联系中,我们称实体集E全部参与联系集R

6.5 BCNF(Boycee Codd Normal Form)

关系模式R<U,F>∈1NF,若X->Y且Y⊈X时必含有键,则R<U,F>∈BCNF。

也就是说关系模式R<U,F>中,每一个决定因素都包含键,则R<U,F>∈BCNF。

由BCNF的定义可以得到结论,一个满足BCNF的关系模式有:

  • 所有非主属性对每一个键都是完全函数依赖
  • 所有主属性对每一个不包含它的键也是完全函数依赖
  • 没有任何属性完全函数依赖于非键的任何一组属性

BCNF⊆3NF。

注意:对范式的讲解,这里是摘抄自《数据库系统概论》5th(王珊,萨师煊)。我觉得《数据库系统概念》6th,
(Abraham Silberschatz …)例子更多,更容易理解一点。

触发器

触发器是特殊类型的储存过程,当某个事件发生时它被自动执行

  1. 指明什么事件发生和满足什么条件执行触发器
  2. 指明触发器执行什么样的动作
  • SQL中的触发器

CREATE TRIGGER OverdraftTrigger
AFTER UPDATE OF Balance ON Account
REFERENCING NEW ROW AS nrow
FOR EACH ROW
WHEN(nrow.balance<0)
BEGIN ATOMIC
INSERT INTO Loan VALUEA(……);
END

后记

六 关系设计库设计

一个关系模式: R(U, F)

其中:

  • 关系名R是符号化的元组定义
  • U为一组属性
  • F为属性组U上的一组数据依赖

从E-R数据库到关系模型

多对多

七 E-R模型

SQL的授权

一对多

6.3 第二范式 (Second Normal Form, 2NF)

若R∈1NF,且每一个非主属性完全函数依赖于任何一个候选键,则称R属于第二范式:R∈2NF。

一个关系模式如果不属于2NF,就会出现如下问题:

  1. 插入异常
  2. 删除异常
  3. 修改复杂

实体完整性和参照完整性

主码:数据库设计者选定的候选码

6.5 多值依赖(Multi-Value Dependency)

暂时省略

以后会修改关于范式的讲解

数据定义

  • SQl的数据类型

CHAR(n) VAECHAR(n) BIT(n) BIT VARYING(n) INT SMALLINT NUMERIC(p,d) DEC(p,d) FLOAT(n) REAL DATA TIME

  • 定义、修改和删除基本表

1.创建基本表

CEARTE TABLE Teachers
(Tno CHAR(7) PRIMARY KEY,
Tname CHAR(10) NOT NULL,
Sex CHAR(2) CHECK (Sex=’男’ or Sex=’女’),
Birthday DATE,
Title CHAR(6),
Dno CHAR(4),
FOREIGN KEY(Dno) REFERENCES Departments(Dno));

2.修改基本表

使用 ALTER TABLE语句修改基本表
向基本表中添加列:
ALTER TABLE <> ADD []<>
对于已存在的列修改缺省值:
ALTER TABLE Student ALTER Sex DEFAULT '女';
ALTER TABLE Student ALTER Sex DROP DEFAULT;
删除已存在的列
ALTER TABLE Courses DROP Pno

3.删除基本表

DROP TABLE <表名> {CASCADE|RESTRICT}

  • 建立和删除索引

CREATE [UNIQUE][CLUSTER] INDEX <索引名>
DROP INDEX <索引名>

  • 模式定义和删除

CREATE SCHEMA Supply_schema AUTHORRIZATION wangqiang;
DROP SCHEMA <模式名> CASCADE|RESTRICT

超码:一个或多个属性的集合,这些属性的组合可以使我们在一个实体集中唯一地标识一个实体

定义视图和删除视图

  • 定义视图

CREATE VIEW SE_Students AS SELECT Sno,Sname,Sex,Birthday,Dno FROM
Students WHERE Speciality = ‘软件工程’ WITH CHECK
OPTION;表示该视图是可更新的

CREATE VIEW Student_Grade(Sno,Sname,Cname,Grade) AS SELECT
S.Sno,Sname,Cname,Grade FROM Students S,SC,Courses C WHERE S.Sno=C.Sno
AND C.Cno= SC.cno;

  • 删除视图

DROP VIEW <视图名> [CASCADE|RESTRICT]

用联系集可能产生的两个问题:

关系数据库的设计理论

 

属性约束

属性上的约束是指属性的取值必须来自其定义的值域

 

数据查询

  • select语句的一般形式

SELECT Cno,Cname,Period,Credit FROM Courses;

SELECT * FROM Courses;

SELECT 2016-year(Birthday) AS Age FROM Students;

SELECT DISTINCT 2016-year(Birthday) Age FROM Students;

SELECT Tname,Sex FROM Teachers WHERE Grade<60;

SELECT DISTINCT Sno FROM SC WHERE Grade<60;

SELECT Sname, Speciality FROM Students WHERE year(Birthday) BETWEEN
187 AND 1990;

SELECT Sname, Speciality FROM Students WHERE year(Birthday) NOT
BETWEEN 187 AND 1990;

SELECT Sno,Sname FROM WHERE Speciality IN
(‘软件工程’,’计算机科学与技术’);

SELECT Sno,Sname FROM WHERE Speciality NOT IN
(‘软件工程’,’计算机科学与技术’);

SELECT Cname FROM Courses WHERE Cname LIKE ‘数据%’

SELECT Sno,Sname FROM Students WHERE LIKE ‘李__’

SELECT * FROM Courses WHERE Cname LIKE ‘C_%’ ESCAPE
”;ESCAPE定义\为转义字符

SELECT * FROM SC WHERE Grade IS NULL;

  • 排序和分组

将查询结果排序:
ORDER BY <排序列> [ASC|DESC]{,<排序列>[ASC|DESC]}

  • 聚集函数

SELECT COUNT(*) FROM SC WHERE Cno=’CS302′;

SELECT MIN(Grade),AVG(Grade),MAX(Grade) FROM SC WHERE Cno=’CS302′;

  • 分组

SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno;

SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno HAVING AVG(Grade)>85;

  • 连接查询

SELECT Cname,Grade FROM SC,Course WHERE SC.Cno=Courses.Cno AND Sno =
‘200605098’;

SELECT Cname,Grade FROM SC,Course WHERE SC.Cno=Courses.Cno AND
Cno=’CS202′ AND Grade>90;

SELECT Student.Sno,Sname,Cname,Grade FROM Student,SC,Course WHERE
Students.Sno=SC.Sno AND SC.Cno=Course.Cno;

  • 嵌套查询
  1. IN引出的子查询
    SELECT Sno,Sname FROM Students WHERE Sex = ‘女’ AND Speciality IN
    (
    SELECT Speciality FROM Students WHERE Sname =’王丽丽’
    );

  2. 集合的比较引出的子查询
    SELECT Sno,Sname,Speciality,Birthday FROM Students WHERE
    Speciality <> ‘软件工程’ AND Birthday > ALL(
    SELECT Birthday FROM Students WHERE Speciality = ‘软件工程’
    );

  3. 存在量词引出的子查询
    SELECT Sno,Sname FROM Students S WHERE EXISTS (
    SELECT * FROM SC WHERE Sno=S.Sno AND Cno = ‘CS403’);

数据更新

  • 插入单个元组

INSERT INTO Students VALUES(……);

INSERT INTO Students(……) VALUES(……);

  • 插入查询结果

INSERT INTO Cardinf(Card-no,Name,Balance) SELECT Tno,Tname,100.00 FROM
Teachers WHERE Dno =’IE’;

  • 删除

DELETE FROM Students WHERE Sno =’98757′;

DELETE FROM Students;删除所有记录

DELETE FROM SC WHERE Sno IN (
SELECT Sno FROM Students WHERE Speciality = ‘计算机软件于理论’);

  • 修改

UPDATE Teachers SET Title = ‘副教授’ WHERE Tno=’B050041′;

UPDATE SC SET Grade = Grade + 5 WHERE Grade < 60 AND Cno IN (
SELECT Cno FROM Courses WHERE Cname=’软件工程’);

断言与数据库约束

断言是一种命名约束,它表达了数据库状态必须满足的逻辑条件。

 

完整性概述

数据库的完整性是指数据库中的数据的正确性、一致性和相容性。数据库中的数据要成为有意义的信息,必须满足一定的语义约束条件。

  • 约束分类
  1. 类型(域)约束:说明给定类型的合法取值
  2. 属性约束:说明属性的合法值
  3. 关系约束:说明关系的合法取值
  4. 数据库约束:说明数据库的合法取值,通常涉及多个关系

实体完整性是一种关系约束,参照完整性是一种数据库约束,而用户定义的完整性可以是上述四种约束的任何一种

静态约束是关于数据库正确状态的约束
动态约束是数据库从一种正确状态转移到另一种状态的约束

  • DBMS对完整性的支持
  1. 说明和定义完整性约束条件的方法
  2. 完整性检查机制
  3. 违约处理

 

弱实体集

一般地,如果一个实体集的任何属性集都不足以形成该实体集的码,则称该实体集为弱实体集,相反的,存在码的实体集称为强实体集
每个弱实体必须存在依赖于一个强实体
弱实体集必须与另一个称为标识实体集属主实体集强实体集相关联才有意义
将弱实体集与其标识实体集相关联的联系称为标识性联系
分辨符部分码

简单属性和符合属性

实体-联系模型

 

SQL对角色的支持

  • 创建角色和角色授权

CREATE ROLE <角色名>

GRANT ALL PRIVILEGES ON Account,Loan,Depositor,Borrower TO Teller;

  • 使用角色授权

GRANT <角色列表> TO <用户/角色列表>

GRANT Manager TO niuxianghui WITH ADMIN OPTION;

  • 收回授予角色的权限

可以像从用户回收权限一样,使用REVOKE语句回收授予角色的授权

  • 收回角色

REVOKE <角色列表> FROM <用户/角色列表> {CASCADE|RESTRICT}

矩形:实体集

实体联系图

实体-联系模型用实体-联系图(E-R图)对现实世界建立概念模型

  • E-R图包含如下成分
  1. 椭圆表示属性,属性写在框内
  2. 矩形表示实体集,实体集名写在框内
  3. 菱形框表示联系,联系名写在框内

双椭圆:多值属性

基于视图的查询

视图是命名的导出表,从用户角度讲,查询时使用视图与使用基本表并无区别

 

完整性与安全性

举个书上的例子:

参照完整性

1.参照完整性与E-R模型

如果是由E-R图得到的,则由联系集转换得到的每一个关系都存在参照完整性
如果来源是弱实体集,包含外码,外码不能取空值

2.违反参照完整性的更新
3.保证参照完整性的措施

拒绝
级连

 

关系约束

关系约束说明关系的合法取值,常常涉及多个同一关系的多个属性和/或多个属性元组(否则可以看作属性约束)

数据库系统概念读书笔记——实体-联系模型

SQL中的参照完整性

SQL支持参照完整性。

 

关系数据库标准语言SQL

  • SQL语言的特点
  1. 集多数数据库语言于一身
  2. 高度非过程化
  3. 面向集合的操作方式
  4. 一种语法两种使用方式
  5. 功能强大,语言简洁

一对一

实体通过一组属性来表示。属性是实体集中每个成员具有的描述性质。将一个属性赋予某实体集表明数据库为实体集中每个实体存储相似的信息,但每个实体在自己的每个属性上都有各自的值。属性类型划分:

线段:将属性连接到实体集或将实体集连接到属性集

 

约束

 

 

双矩形:弱实体集

实体集

书里的电话号码和姓名的例子很清楚,哪个为属性哪个为实体集,注意两点常见的错误:

菱形:联系集

码概念使得我们可以区别实体,码同样可以唯一地标识联系,并将联系互相区分开来

基本概念

 

 

虚椭圆:派生属性

二元联系集与n元联系集

前言
为了重新回顾我写的消息系统架构,我需要重新读一下数据库系统概念的前三章,这里简单的…

单值属性和多值属性

另一个常见的错误是将有关系的实体集的主码属性作为联系集的属性

多对一

椭圆:属性

设计问题

参与约束

映射基数,或基数比例,指明通过一个联系集能同时与另一个实体相联系的实体数目

有了实体集合,有了联系集合,自然而然的就产生出来约束,约束描述的是实体集和实体集之间的关系,而这种关系具现为一个联系集。我们要讨论的是映射基数和参与约束

为了重新回顾我写的消息系统架构,我需要重新读一下数据库系统概念的前三章,这里简单的做一个笔记,方便自己回顾

我们必须有一个能区分一个实体集中的所有实体的方法。概念上来说,各个实体是互异的;但从数据库的观点来看,它们的区别必须用其属性来表明

 

E-R图包括如下几个主要组件:

候选码:任意真子集都不能称为超码的超码,也就是最小的超码

实体-联系图

实体集是具有相同类型及共享相同性质(或属性)的实体集合

联系集

 

 

纯粹为了回顾E-R模型和E-R图的画法,比较水,高手可以直接跳过了!

如果实体集E中只有部分实体参与到联系集R的联系中,我们称实体集E部分参与联系集R

派生属性

前言

实体集和联系集的概念并不精确,而且定义一组实体及它们的相互联系可以有多种不同的方式

数据多次存储,浪费存储空间

对于实体集A和B之间的二元联系集R来说,映射基数必然是以下情况之一:

 

用实体集还是属性

一个常见的错误是用实体集的主码作为另一个实体集的属性,而不是用联系

 

联系集是同类型联系的集合。规范的说,联系集是n(n >=
2)个实体集上的数学关系,这些实体集不必互异。如果E1, E2, …,
En为n个实体集,那么联系集R是{(e1,e2,e3,..,en)|e1 (- E1, e2 (-E2, …, en
(- En}的一个子集,其中(e1, e2, e3,…,en)是一个联系

 

实体-联系(E-R)数据模型基于对现实世界的这样一种认识:世界由一组称为实体的基本对象及这些对象间的联系组成。E-R数据模型所采用的三个主要概念是:实体集、联系集和属性

用实体集还是联系集