软考连载(三)

论坛 期权论坛 脚本     
匿名网站用户   2020-12-20 05:48   11   0

第三章 数据库

1.1三级模式 – 两层映射

在这里插入图片描述

【三级模式】

外模式 《==》 视图级

概念模式 《==》 表级

内模式 《==》 文件级

【两级映射】

外模式 --to–》 概念模式

概念模式 —to—》 内模式

2.2 数据库设计过程

在这里插入图片描述

【设计过程】

  1. 需求分析:数据流图、数据字典、需求说明书
  2. 概念结构设计:ER模型
  3. 逻辑结构设计:关系图
  4. 物理设计:

2.3 E-R模型 *************

反应的是实体与实体之间的关系

在这里插入图片描述

  1. 1 :1模型

    在这里插入图片描述

  2. 1 :n模型

    在这里插入图片描述

  3. n :1模型

  4. m :n模型

在这里插入图片描述

《***》在多对多的模型当中,关系需要单独作为一个实体!!!

  • 一个实体型转换为一个关系模式

  • 联系转换关系模式

    • 1:1 联系==》可以将联系合并到任意一端的实体关系模式当中。
    • 1:n 联系==》可将联系合并到n端实体关系模式中
    • m:n联系==》联系必须单独转换成关系图
  • 三个以上实体间的一个多元联系

    在这里插入图片描述

2.4 关系代数

交运算、并运算、差运算、笛卡尔积运算、自然连接

  • 笛卡尔积运算

在这里插入图片描述

2.5 规范化理论

目的:避免数据冗余,避免修改异常,避免插入异常,删除异常

1.部分函数依赖

2.传递函数依赖

2.6 规范化理论 – 键

  1. 候选键:唯一标识元组,且无冗余

    1. 主键:任选一个
    2. 外键:其他关系的主键

    例如:姓名:张三,身份证:422125615221211,年龄:28岁,国籍:中国

    则姓名、身份证、年龄、国籍均为候选键

    其中若设置身份证为主键,则其他成分为外键。

  2. 图示法求候选键:

    1. 将关系的函数依赖关系,用“有向图”的方式表示
    2. 找出入度为0的属性,并以该属性集合为起点,尝试遍历有向图,若能正常遍历图中的所有结点,则该属性集即为关系模式的候选键。
    3. 若入度为0的属性不能遍历途中所有节点,则尝试性的将一些中间结点并入入度为零的属性集合中,直到该集合能遍历所有节点,集合为候选键。

2.7 规范化理论 – 主属性和非主属性

定义:组成候选码的属性就是主属性,其他的就是非主属性

例如:关系模式R(A,B,C),其中F = {(A , B)-> C, C -> A};则有

(B,A)(B,C)为两组候选码,则组成他们的A,B,C 均为主属性。

2.8 规范化理论 – 范式

  1. 第一范式:属性不可再分

在这里插入图片描述

  1. 第二范式:没有部分函数依赖

在这里插入图片描述

  1. 第三范式:没有非主属性传递依赖于候选键

在这里插入图片描述

  1. 总结:

在这里插入图片描述

2.9 SQL语句 – 建表

设有学生、课程、学生选课关系模式,分别用基本表S、C、SC表示,其中S(Sno,Sname,SD,Sage,Sex)属性表示学号、姓名、系、年龄、性别;C(Cno,Cname,teacher),属性表示课程号,课程名,上课教师,SC(Sno,Cno,Grade),属性表示学号,课程号,成绩。除年龄和成绩的数据类型为int,其余的均是字符型char

CREATE TABLE S(Sno char(5) PRIMARY KEY,
   Sname char(8) NOT NULL,
   SD char(10),
   Sage int,
   Sex char(2)
);

CREATE TABLE C(Cno char(2) PRIMARY KEY,
   Cname char(16) UNIQUE,
   teacher char(8)
);

CREATE TABLE SC(Sno char(5)
   Cno char(2),
   Grage int,
   PRIMARY KEY(Sno,Cno),
   FOREIGN KEY (Sno) REFERENCES S(Sno),
   FOREIGN KEY (Cno) REFERENCES C(Cno)
);

2.10 SQL语句 – 查询

SELECT 列名称 FROM 表名称
SELECT * FROM 表名称
例子:SELECT LastName,FirstName FROM Persons

SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
例子1:SELECT * FROM Persons WHERE City='Beijing'
例子2:SELECT * FROM Persons WHERE Year>1965


[WHERE <条件表达式>]
[GRORP BY <列名1> [HAVING <条件表达式>]]
[ORDER BY <列名2> [ASC|DESC]...]

排序:

例子1:以字母顺序显示公司名称
SELECT Company, OrderNumber FROM Orders ORDER BY Company

例子2:以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber)
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber

例子3:以逆字母顺序显示公司名称
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC

例子4:以逆字母顺序显示公司名称,并以数字顺序显示顺序号
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC

2.11 SQL语句 – 插入

INSERT INTO 表名称 VALUES (值1, 值2,....)
例子1:INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')

INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
例子2:INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')

2.12 SQL语句 – 修改

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
例子1:UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson' 
例子2:UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'
WHERE LastName = 'Wilson'

2.11 SQL语句 – 删除

DELETE FROM 表名称 WHERE 列名称 = 值
例子1:DELETE FROM Person WHERE LastName = 'Wilson' 
例子2:DELETE FROM table_name 或者 DELETE * FROM table_name

2.11 数据库完整性约束

  1. 实体完整性约束
  2. 参照完整性约束
  3. 用户自定义完整性约束
    • 触发器(脚本实现)

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP