精华内容
下载资源
问答
  • 数据库原理 知识点总结 概括的介绍了 数据库原理的大部分知识点
  • 数据库原理知识点

    2019-06-05 19:28:00
    元组:二维表中的行称为元组,每一行是一个元组。 转载于:https://www.cnblogs.com/yk-ddm/p/10981481.html

    元组:二维表中的行称为元组,每一行是一个元组。

     

     

     

     

    转载于:https://www.cnblogs.com/yk-ddm/p/10981481.html

    展开全文
  • 数据库\数据库原理知识
  • 数据库知识点数据库DB数据库系统DBS数据库管理系统DBMS软件架构SQL语句复杂查询语句主键和外键E-R图数据库软件字符集内连接和外连接JDBC 数据库DB 按照数据结构来组织、存储和管理数据的仓库。 用来存储和管理数据的...

    1 数据库DB

    按照数据结构来组织、存储和管理数据的仓库。
    用来存储和管理数据的容器。

    2 数据库系统DBS

    指计算机中引入数据库后的系统,一般由数据库、数据库管理系统、应用程序和数据库管理员组成。

    3 数据库管理系统DBMS

    管理控制数据库的软件。

    4 软件架构

    架构 C/S B/S
    模式 Client ⇌ Server Client ⇌ WebServer ⇌ DatebaseServer
    优点 安全性好 使用灵活,易维护,客户端配置要求较低

    5 SQL语句

    • create
      CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据类型, 列名称3 数据类型, .... )
    • drop
      DROP TABLE 表名称
    • select
      SELECT 列名称 FROM 表名称
    • insert
      INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
    • update
      UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
    • alter
      ALTER TABLE 语句用于在已有的表中添加、修改或删除列。

    6 复杂查询语句

    • 排序:ORDER BY 语句用于根据指定的列对结果集进行排序,默认为升序。
      SELECT Company, OrderNumber FROM Orders ORDER BY Company
    • 分组:GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。
      SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer
    • 条件查询:WHERE 语句用于设置查询的条件。
      SELECT 列名称 FROM 表名称 WHERE 列 运算符 值

    7 主键和外键

    主键用来保证表中每条记录的唯一性;
    外键用来表示于另一张表的关联,用于保持数据的一致性。

    8 E-R图

    E-R图用于表示关系模型(实体的属性和实体与实体的联系)。
    E是实体,R是关系。

    E-R图

    9 数据库软件

    数据库 特点
    Mysql 体积小,速度快,成本低,开源
    Oracle 功能强,稳定,性能好,收费
    DB2 稳定,适合大型企业开发
    SQL Server 易用,常用于WinServer

    10 字符集

    • utf8 可变长度字符编码,可以显示中文简体繁体及其它语言。
    • gbk 汉字内码扩展规范,仅包含全部中文字符。

    11 内连接和外连接

    连接 特点
    内连接 在每个表中找出符合条件的共有记录
    左外连接 根据左表记录,在右表中找到符合条件的记录与之匹配
    右外链接 根据右表记录,在左表中找到符合条件的记录与之匹配

    12 JDBC

    Java利用JDBC可以使代码运行在多种数据库系统下。
    JDBC的基本功能有:

    1. 建立于数据库的连接
    2. 想数据库发送SQL语句
    3. 处理从数据库返回的结果

    13 事务

    特征:原子性、一致性、隔离性和持久性。

    • 原子性:即事务是数据库操作的最小单位,事务内的数据库操作要么全部执行成功,要么全部不执行
    • 一致性:在事务执行前后,数据库始终保持一致性
    • 隔离性:事务间相互隔离,数据库允许多个并发事务同时对其数据进行读写和修改的能力
    • 持久性:事务对数据库的更改是永久性的

    14 索引

    索引是一张表,该表保存了主键与索引字段,并指向实体表的记录。
    索引能有效提高数据库的搜索效率。

    展开全文
  • 关系数据库

    知识框架

    基础篇
    第1章 绪论
    第2章 关系数据库
    第3章 关系数据库标准语言SQL
    第4章 数据库安全性
    第5章 数据库完整性

    设计与开发篇
    第6章 关系数据理论
    第7章 数据库设计
    第8章 数据库编程

    系统篇
    第9章 关系查询处理和查询优化
    第10章 数据库恢复技术
    第11章 并发控制
    第12章 数据库管理系统

    第1章:绪论

    1.1 数据库系统概述
    数据(Data):

    数据(Data)是数据库中存储的基本对象
    数据的含义称为数据的语义,数据与其语义是不可分的。

    数据库(Database):

    数据库(Database,简称DB)是长期储存在计算机内、有组织的、可共享的大量数据的集合。
    数据库的基本特征:

    1. 数据按一定的数据模型组织、描述和储存
    2. 可为各种用户共享
    3. 冗余度较小
    4. 数据独立性较高
    5. 易扩展

    数据库管理系统(DBMS):

    位于用户与操作系统之间的一层数据管理软件;是基础软件,是一个大型复杂的软件系统

    数据库管理系统主要功能:

    1. 数据定义功能
      提供数据定义语言(DDL)
      定义数据库中的数据对象
    2. 数据组织、存储和管理
      分类组织、存储和管理各种数据
      确定组织数据的文件结构和存取方式
      实现数据之间的联系
      提供多种存取方法提高存取效率
    3. 数据操纵功能
      提供数据操纵语言(DML)
      实现对数据库的基本操作 (查询、插入、删除和修改)
    4. 数据库的事务管理和运行管理
      数据库在建立、运行和维护时由数据库管理系统统一管理和控制
      保证数据的安全性、完整性、多用户对数据的并发使用
      发生故障后的系统恢复
    5. 数据库的建立和维护功能
      数据库初始数据的装载和转换
      数据库转储、恢复功能
      数据库的重组织
      性能监视、分析等
    6. 其它功能
      数据库管理系统与网络中其它软件系统的通信
      数据库管理系统系统之间的数据转换
      异构数据库之间的互访和互操作

    数据库系统(DBS):

    数据库系统(Database System,简称DBS)

    数据库系统的构成:
    数据库
    数据库管理系统(及其应用开发工具)
    应用程序
    数据库管理员

    结构如下:
    数据库系统结构图
    数据库系统的特点:

    1. 数据结构化

    数据的整体结构化是数据库的主要特征之一 整体结构化:不再仅仅针对某一个应用,而是面向全组织
    不仅数据内部结构化,整体是结构化的,数据之间具有联系 数据记录可以变长 数据的最小存取单位是数据项

    1. 数据的共享性高,冗余度低且易扩充

    数据面向整个系统,可以被多个用户、多个应用共享使用。 数据共享的好处:减少数据冗余,节约存储空间 避免数据之间的不相容性与不一致性
    使系统易于扩充

    1. 数据独立性高

    物理独立性
    指用户的应用程序与数据库中数据的物理存储是相互独立的。当数据的物理存储改变了,应用程序不用改变。
    逻辑独立性
    指用户的应用程序与数据库的逻辑结构是相互独立的。数据的逻辑结构改变了,应用程序不用改变。
    数据独立性由数据库管理系统的二级映像功能来保证。

    1. 数据由数据库管理系统统一管理和控制

    数据库管理系统提供的数据控制功能
    (1)数据的安全性(Security)保护
    保护数据以防止不合法的使用造成的数据的泄密和破坏。
    (2)数据的完整性(Integrity)检查
    保证数据的正确性、有效性和相容性。
    (3)并发(Concurrency)控制
    对多用户的并发操作加以控制和协调,防止相互干扰而得到错误的结果。
    (4)数据库恢复(Recovery)
    将数据库从错误状态恢复到某一已知的正确状态。

    应用程序与数据的对应关系:
    应用程序与数据的对应关系
    1.2 数据模型
    数据模型分为两类(两个不同的层次)

    (1) 概念模型 也称信息模型,它是按用户的观点来对数据和信息建模,用于数据库设计。 (2) 逻辑模型和物理模型
    逻辑模型主要包括网状模型、层次模型、关系模型、面向对象数据模型、对象关系数据模型、半结构化数据模型等。按计算机系统的观点对数据建模,用于DBMS实现。
    物理模型是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,在磁盘或磁带上的存储方式和存取方法。

    客观对象的抽象过程—两步抽象:

    现实世界中的客观对象抽象为概念模型: 将现实世界抽象为信息世界

    把概念模型转换为某一数据库管理系统支持的数据模型: 将信息世界转换为机器世界

    信息世界中的基本概念:

    (1)实体(Entity) 客观存在并可相互区别的事物称为实体。 可以是具体的人、事、物或抽象的概念。
    (2)属性(Attribute) 实体所具有的某一特性称为属性。 一个实体可以由若干个属性来刻画。
    (3)码(Key) 唯一标识实体的属性集称为码。
    (4)实体型(Entity Type) 用实体名及其属性名集合来抽象和刻画同类实体称为实体型
    (5)实体集(Entity Set) 同一类型实体的集合称为实体集
    (6)联系(Relationship) ①现实世界中事物内部以及事物之间的联系在信息世界中反映为实体(型)内部的联系和实体(型)之间的联系。②实体内部的联系通常是指组成实体的各属性之间的联系。 实体之间的联系通常是指不同实体集之间的联系。③实体之间的联系有一对一、一对多和多对多等多种类型。

    实体-联系方法:

    实体-联系方法(Entity-Relationship Approach)
    用E-R图来描述现实世界的概念模型
    E-R方法也称为E-R模型

    数据模型的组成要素:

    数据结构
    数据操作
    数据的完整性约束条件

    1.3 数据库系统的结构
    1.4 数据库系统的组成

    知识点太多,慢慢更新。

    展开全文
  • 数据库原理知识梳理 一、DBS系统构成 1、DB的概念与特点: 数据库(DB)是存储在计算机系统内的有结构的数据集合,是相关数据的集合,数据由数据库管理系统统一管理和维护。 数据(Data)指的是可观察的客观事实,...

    数据库原理知识梳理
    一、DBS系统构成
    1、DB的概念与特点:
    数据库(DB)是存储在计算机系统内的有结构的数据集合,是相关数据的集合,数据由数据库管理系统统一管理和维护。
    数据(Data)指的是可观察的客观事实,并且有隐含的含义。
    在数据库中,数据与数据的含义(数据名称及说明)同时存储。
    数据的最小存取单位是构成记录的、有名称的、有含义的最小数据单位——数据项。
    定义数据库时,必须定义数据项的逻辑结构。
    在使用数据库时,以数据项名存储数据、更新数据以及查询和使用数据。
    在数据库中,不仅包含数据本身,还包含了数据结构和约束的完整性定义或者描述。这些定义存储在DBMS的目录中,称为数据库的元数据或者数据字典。
    任何合法用户都可以在元数据的帮助下,利用数据项名方面的访问数据库中的数据以及他们的逻辑定义,并使用这些数据,亦即数据可高度共享。
    数据库是存储在计算机系统内的有结构的数据的集合,数据是由数据库管理系统管理的。

    2、DBS特点与组成要素:
    DBS是指在计算机系统中引入数据库后的数据构成,由计算机硬件、操作系统、DBMS、DB、应用程序和用户以及数据库开发和管理人员等组成。
    数据库系统区别于传统文件处理系统的最重要特征是引入了数据库这个概念,以及产生数据库管理系统。
    与文件系统相比,DBS有如下四个主要特点:
    整体数据结构化:数据库中的任何数据都是公开的,不属于任何应用,结构是全面的。
    数据的共享度高:在显示数据的同时可以显示数据的逻辑结构;整个组织的整体数据被综合考虑,整体数据结构化。可以方面的使用数据和扩充新的应用。
    数据的独立性高:数据与数据的结构存储在数据库中,应用程序既不存储数据也不存储数据的逻辑结构。数据与程序相对独立。
    高度的数据控制能力:具有较高的数据安全性;较好的数据完整性;较强的并发控制能力;较强的数据恢复能力。

    3、DBMS的功能:
    数据库管理系统是专门用来实现和维护数据库而建立的通用软件。
    DBMS是操作系统支持下工作的数据管理软件,是支持用户创建和维护数据库的一组程序包。对内负责管理数据库,对外向用户提供一整套命令。用户可以通过命令来创建数据库,定义数据,对数据库中的数据进行各种合法的操作。
    DBMS有如下六种基本功能:
    数据定义:用户可以利用数据定义语言(DDL)来方便地定义数据库中数据的逻辑结构。
    数据操纵:用户可以利用数据操纵语言(DML)来实现对数据库对数据库中数据的插入、查找、修改或者删除操作。
    完整性约束检查:检查数据时候符合一定的规定。
    访问控制:通过数据控制语言(DCL)来实现对不同级别用户的访问控制功能。
    并发控制:通过只用并发控制功能,可以确保试图更新同一数据的多个用户能够以一种受控的方式完成各自的工作,即避免并发操作时可能带来的数据不一致性。
    数据恢复:恢复数据库。

    4、DBA的职责
    数据库管理员的主要职责有:
    在用户与数据库开发人员之间进行沟通和协调。
    参与数据库设计工作。
    决定数据的完整性约束和不同用户的存取权限。
    保证数据库的正常运行,进行数据库的维护工作。
    提出数据库的重构计划。

    二、DB的三级模式与关系数据模型的实例
    数据的三级模式结构包括外模式、模式和内模式。

    模式:也成逻辑模式,是数据库中全体数据在逻辑上的视图。逻辑结构包括数据记录的名称,数据项的名称、类型、域值。通过模式DDL来进行模式的定义。
    数据库中存储的是数据及数据之间的联系。
    Transaction:事务
    数据库是在计算机系统中按照一定的数据模型组织、存储和应用的数据的集合。
    关系数据操作语言(DML)的特点是:操作对象与结果均是 关系、操作的非过程性强 、语言一体化,并且是建立在数学理论的基础上的。

    三、SQL语言的特点
    一体化
    面向集合的操作方式。
    高度非过程化
    两种使用方式,统一的语法结构。
    语言简洁,易学易用。

    四、视图的定义
    视图是从一个或多个关系(基本表或已存在的视图)导出的关系。是数据库系统的一个重要机制。

    五、视图与基本表的区别与联系
    视图是虚表,在一般情况下不建立索引。
    sql一般也不提供修改视图定义的语句。
    对视图中数据进行更新是有限制的。

    六、数据模型的三要素
    数据结构
    数据操作
    完整性约束

    七、事务
    事务是数据库操作的最小逻辑工作单元,是一系列SQL操作的集合。
    事务必须具有的四个性质(ACID特性)是:原子性、一致性、隔离性和持久性。
    提交(commit transaction):使事务成功地结束。所执行事务对数据库的所有更新将永远存在。
    回滚(rollback transaction):即在事务的运行过程中发生了某种故障,事务不能继续运行,影响该事务的SQL语句所造成的任何改变必须全部作废,回滚到事务开始前的状态。

    八、并发操作的三类问题
    丢失更新:写写冲突,加排它锁X
    读“脏”数据:写读冲突,加共享锁S
    不可重复读:读写冲突

    九、数据库系统的基本特点
    整体数据结构化
    数据的共享度高
    数据的独立性高
    高度的数据控制能力。

    十、数据库的基本特点
    数据可以共享
    数据独立性
    数据冗余小,易扩充
    统一管理和控制。

    十一、自然连接与等值连接的区别
    自然连接要求相等的分量必须有共同的属性;等值连接就不需要。
    自然连接要求把结果中的所有重复属性名都去掉一个;等值连接却不这样。

    十二、SQL语言分类
    DDL数据定义语言:负责创建、修改、删除表、索引和视图等对象,由动词 create, alter, drop 组成。
    DML数据操作语言:负责数据库中数据的插入、修改、查询和删除操作,由动词 insert, update, select, delete 组成。
    DCL数据控制语言:用来授予和撤销用户对数据的操作权限,由动词 grant, revoke 组成。

    十三、SQL数据类型
    int/integer:全字长整数型
    smallint:半字长整数型
    decimal(p[,q]):精确数值型,共p位,小数点后有q位。
    float:双字长浮点数
    char(n):长度为n的定长字符串
    varchar(n):最大长度为n的变长字符串。
    datetime:日期时间型,格式可以设置

    十四、数据完整性约束
    not null:不为空
    null:可以为空
    unique:不能有相同的值

    十五、集函数
    count(distinct/all *):统计结果中元组个数
    count(distinct/all<列名>):统计结果中某列值的个数
    max(<列名>):给出一列上的最大值
    min(<列名>):给出一列上的最小值
    sum(distinct/all<列名>):给出一列上值的总和
    avg(distinct/all<列名>):给出一列上值的平均

    十六、特殊运算符
    [公式]

    十七、查询方式
    1、分组查询

    where子句作用于基表或者视图,从中选择满足条件的元组;having子句作用于分组后的组,从中选择满足条件的组。
    2、排序查询

    用 order by 进行默认升序排序
    在列名后面添加 desc 进行降序排序
    3、多关系连接查询

    交叉连接: cross join ,两表之间没有任何联系
    select [distinct/all] <目标列清单>
    from <关系名[别名]清单>
    2.内部连接: inner join ,两表之间具有共同性质的属性。

    select [distinct/all] <目标清单>
    from <关系名1> inner join <关系名2>
    on <连接条件>
    3.外连接: outer join

    4.自身连接: self join

    4、嵌套查询

    如果子查询的返回结果总是单个值,那么可以用“=”来代替“in”。
    在嵌套查询中可以使用比较运算符来构成它的连接词。如 < , > , = , <= , >= , <>
    在比较运算符的后面可以加上 any 后者 all , any 只需其中的一个即可, all 表示必须全部满足。
    在使用嵌套语句时也可以结合 between…and…
    十八、select语句的集合操作
    集合操作主要包括并(union),交(intersect),差(except/minus)
    select默认保留重复的元素,除非使用 distinct 进行指明。但是select语句的集合操作,在默认情况是消除重复元组的,要想保留,需要在集合操作的关键字后面加上 all。
    十九、视图操作
    1、定义视图

    create view <视图名>
    as <子查询>
    [with check option]
    若有 with check option ,则今后在对此视图,进行 insert, update, delete 操作时,会自动检查是否符合原定义视图子查询中的<条件表达式>。
    视图是数据库中数据的物理独立性和逻辑独立性的重要支柱。
    2、删除视图

    drop view
    二十、参照完整性约束的实现策略
    限制策略: no action
    级联策略: cascade
    置空策略
    二十一、完整性约束
    实体完整性:通过主码定义来完成
    参照完整性:外部码约束references 和参照完整性约束
    用户自定义完整性:基于属性和元组的check约束
    二十二、触发器的基本概念
    触发器,就是一类由数据库操作实践(插入、删除、修改)驱动的特殊过程,一旦由某个用户定义,任何用户对该触发器指定的数据进行增、删或改操作时,系统将会自动激活相应的触发动作,在数据库服务器上进行集中的完整性控制。
    tigger
    二十三、访问控制
    授予权限 grant
    收回权限 revoke
    二十四、规范化
    1、未规范化的数据存在的问题

    数据冗余度大,主要由于属性之间的约束关系太强导致。
    修改异常。
    插入与删除异常。
    2、规范化后的数据的好处

    数据量减少
    表达能力增强
    修改方便
    找出所有没有选修1号课程的学生姓名;
    select sname
    from student
    where sno not in --“ not in ”等同于“ <> all ”
    (select sno
    from grade
    where cno=‘1’)

    找出选修了全部课程的学生姓名。
    –(提示:可找出这样的学生,没有一门课程是他不选修的。)
    Select sname from student
    Where not exists ( select cno from course
    Except
    Select cno from grade where grade.sno=student.sno )
    数据库范式1NF 2NF 3NF BCNF(实例)
    设计范式(范式,数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。关系数据库中的关系必须满足一定的要求,即满足不同的范式。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。下面我们举例介绍第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。

    在创建一个数据库的过程中,范化是将其转化为一些表的过程,这种方法可以使从数据库得到的结果更加明确。这样可能使数据库产生重复数据,从而导致创建多余的表。范化是在识别数据库中的数据元素、关系,以及定义所需的表和各表中的项目这些初始工作之后的一个细化的过程。

    下面是范化的一个例子:

    Customer ; Item purchased ; Purchase price
    Thomas ; Shirt ; $40
    Maria Tennis; shoes ; $35
    Evelyn ; Shirt ; $40
    Pajaro ; Trousers ; $25
    如果上面这个表用于保存物品的价格,而你想要删除其中的一个顾客,这时你就必须同时删除一个价格。范化就是要解决这个问题,你可以将这个表化为两个表,一个用于存储每个顾客和他所买物品的信息,另一个用于存储每件产品和其价格的信息,这样对其中一个表做添加或删除操作就不会影响另一个表。

    关系数据库的几种设计范式介绍
    1、第一范式(1NF)

    在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。

    所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。例如,对于图3-2 中的员工信息表,不能将员工信息都放在一列中显示,也不能将其中的两列或多列在一列中显示;员工信息表的每一行只表示一个员工的信息,一个员工的信息在表中只出现一次。简而言之,第一范式就是无重复的列。

    2、第二范式(2NF)

    第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。如图3-2 员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分。这个惟一属性列被称为主关键字或主键、主码。

    第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是非主属性非部分依赖于主关键字。

    3、第三范式(3NF)

    满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在图3-2的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。

    数据库设计三大范式应用实例剖析
    数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。

    设计范式是不是很难懂呢?非也,大学教材上给我们一堆数学公式我们当然看不懂,也记不住。所以我们很多人就根本不按照范式来设计数据库。

    实质上,设计范式用很形象、很简洁的话语就能说清楚,道明白。本文将对范式进行通俗地说明,并以笔者曾经设计的一个简单论坛的数据库为例来讲解怎样将这些范式应用于实际工程。

    范式说明
    第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。

    例如,如下的数据库表是符合第一范式的:

    字段1 字段2 字段3 字段4
    而这样的数据库表是不符合第一范式的:

    字段1 字段2 字段3 字段4
         字段3.1 字段3.2   
    很显然,在当前的任何关系数据库管理系统(DBMS)中,傻瓜也不可能做出不符合第一范式的数据库,因为这些DBMS不允许你把数据库表的一列再分成二列或多列。因此,你想在现有的DBMS中设计出不符合第一范式的数据库都是不可能的。

    第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字。

    假定选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),关键字为组合关键字(学号, 课程名称),因为存在如下决定关系:

    (学号, 课程名称) → (姓名, 年龄, 成绩, 学分)
    这个数据库表不满足第二范式,因为存在如下决定关系:

    (课程名称) → (学分)
    (学号) → (姓名, 年龄)
    即存在组合关键字中的字段决定非关键字的情况。

    由于不符合2NF,这个选课关系表会存在如下问题:

    (1) 数据冗余:同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。

    (2) 更新异常:若调整了某门课程的学分,数据表中所有行的"学分"值都要更新,否则会出现同一门课程学分不同的情况。

    (3) 插入异常:假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有"学号"关键字,课程名称和学分也无法记录入数据库。

    (4) 删除异常:假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。

    把选课关系表SelectCourse改为如下三个表:

    学生:Student(学号, 姓名, 年龄);
    课程:Course(课程名称, 学分);
    选课关系:SelectCourse(学号, 课程名称, 成绩)。
    这样的数据库表是符合第二范式的, 消除了数据冗余、更新异常、插入异常和删除异常。

    另外,所有单关键字的数据库表都符合第二范式,因为不可能存在组合关键字。

    第三范式(3NF):在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系:

    关键字段 → 非关键字段x → 非关键字段y
    假定学生关系表为Student(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话),关键字为单一关键字"学号",因为存在如下决定关系:

    (学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话)
    这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:

    (学号) → (所在学院) → (学院地点, 学院电话)
    即存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递函数依赖。

    它也会存在数据冗余、更新异常、插入异常和删除异常的情况,读者可自行分析得知。

    把学生关系表分为如下两个表:

    学生:(学号, 姓名, 年龄, 所在学院);
    学院:(学院, 地点, 电话)。
    这样的数据库表是符合第三范式的,消除了数据冗余、更新异常、插入异常和删除异常。

    鲍依斯-科得范式(BCNF):在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合第三范式。

    假设仓库管理关系表为StorehouseManage(仓库ID, 存储物品ID, 管理员ID, 数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:

    (仓库ID, 存储物品ID) → (管理员ID, 数量)
    (管理员ID, 存储物品ID) → (仓库ID, 数量)
    所以,(仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)都是StorehouseManage的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:

    (仓库ID) → (管理员ID)
    (管理员ID) → (仓库ID)
    即存在关键字段决定关键字段的情况,所以其不符合BCNF范式。它会出现如下异常情况:

    (1) 删除异常:当仓库被清空后,所有"存储物品ID"和"数量"信息被删除的同时,"仓库ID"和"管理员ID"信息也被删除了。

    (2) 插入异常:当仓库没有存储任何物品时,无法给仓库分配管理员。

    (3) 更新异常:如果仓库换了管理员,则表中所有行的管理员ID都要修改。

    把仓库管理关系表分解为二个关系表:

    仓库管理:StorehouseManage(仓库ID, 管理员ID);
    仓库:Storehouse(仓库ID, 存储物品ID, 数量)。
    这样的数据库表是符合BCNF范式的,消除了删除异常、插入异常和更新异常。

    范式应用
    我们来逐步搞定一个论坛的数据库,有如下信息:

    (1) 用户:用户名,email,主页,电话,联系地址
    (2) 帖子:发帖标题,发帖内容,回复标题,回复内容
    第一次我们将数据库设计为仅仅存在表:

    用户名 email 主页 电话 联系地址 发帖标题 发帖内容 回复标题 回复内容
    这个数据库表符合第一范式,但是没有任何一组候选关键字能决定数据库表的整行,唯一的关键字段用户名也不能完全决定整个元组。我们需要增加"发帖ID"、"回复ID"字段,即将表修改为:

    用户名 email 主页 电话 联系地址 发帖ID 发帖标题 发帖内容 回复ID 回复标题 回复内容
    这样数据表中的关键字(用户名,发帖ID,回复ID)能决定整行:

    (用户名,发帖ID,回复ID) → (email,主页,电话,联系地址,发帖标题,发帖内容,回复标题,回复内容)
    但是,这样的设计不符合第二范式,因为存在如下决定关系:

    (用户名) → (email,主页,电话,联系地址)
    (发帖ID) → (发帖标题,发帖内容)
    (回复ID) → (回复标题,回复内容)
    即非关键字段部分函数依赖于候选关键字段,很明显,这个设计会导致大量的数据冗余和操作异常。

    我们将数据库表分解为(带下划线的为关键字):

    (1) 用户信息:用户名,email,主页,电话,联系地址
    (2) 帖子信息:发帖ID,标题,内容
    (3) 回复信息:回复ID,标题,内容
    (4) 发贴:用户名,发帖ID
    (5) 回复:发帖ID,回复ID
    这样的设计是满足第1、2、3范式和BCNF范式要求的,但是这样的设计是不是最好的呢?

    不一定。观察可知,第4项"发帖"中的"用户名"和"发帖ID"之间是1:N的关系,因此我们可以把"发帖"合并到第2项的"帖子信息"中;第5项"回复"中的"发帖ID"和"回复ID"之间也是1:N的关系,因此我们可以把"回复"合并到第3项的"回复信息"中。这样可以一定量地减少数据冗余,新的设计为:

    (1) 用户信息:用户名,email,主页,电话,联系地址
    (2) 帖子信息:用户名,发帖ID,标题,内容
    (3) 回复信息:发帖ID,回复ID,标题,内容
    数据库表1显然满足所有范式的要求;

    数据库表2中存在非关键字段"标题"、"内容"对关键字段"发帖ID"的部分函数依赖,即不满足第二范式的要求,但是这一设计并不会导致数据冗余和操作异常;

    数据库表3中也存在非关键字段"标题"、"内容"对关键字段"回复ID"的部分函数依赖,也不满足第二范式的要求,但是与数据库表2相似,这一设计也不会导致数据冗余和操作异常。

    由此可以看出,并不一定要强行满足范式的要求,对于1:N关系,当1的一边合并到N的那边后,N的那边就不再满足第二范式了,但是这种设计反而比较好!

    对于M:N的关系,不能将M一边或N一边合并到另一边去,这样会导致不符合范式要求,同时导致操作异常和数据冗余。

    对于1:1的关系,我们可以将左边的1或者右边的1合并到另一边去,设计导致不符合范式要求,但是并不会导致操作异常和数据冗余。

    结论
    满足范式要求的数据库设计是结构清晰的,同时可避免数据冗余和操作异常。这并意味着不符合范式要求的设计一定是错误的,在数据库表中存在1:1或1:N关系这种较特殊的情况下,合并导致的不符合范式要求反而是合理的。

    在我们设计数据库的时候,一定要时刻考虑范式的要求。

    展开全文
  • 主要参考: https://blog.csdn.net/liuxyen/article/details/78591722 辅助参考: 事务 https://blog.csdn.net/qq_36982160/article/details/89258056 https://wenku.baidu.com/view/b55096db102de2bd96058898.html ...
  • 数据库系统概述 一、有关概念 1.数据 2.数据库(DB) 3.数据库管理系统(DBMS) Access 桌面DBMS VFP SQL Server Oracle 客户机/服务器型DBMS MySQL DB2 4.数据库系统(DBS) 数据库(DB) ...
  • 数据库原理 知识点总结

    千次阅读 多人点赞 2015-12-15 10:33:10
    这是我看到的最好的数据库原理的帖子,故转载过来,如有侵犯版权,将立即删除。 数据库概念 数据库(Database,简称DB)是长期储存在计算机内、有组织的、可共享的大量数据的集合。 数据库系统的特点 ...
  • 名词积累:数据库(Database):存放和提供数据的“库房”数据(Data):数据库中存储的基本对象。数据库管理系统(DBMS):位于用户与操作系统之间的一层数据管理软件。数据库系统(Database System):包括数据库、DBMS、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,071
精华内容 828
关键字:

数据库原理知识点