第6章:数据库设计基础知识

数据库基本概念

  数据(Data)是描述事物的符号记录,它具有多种表现形式,可以是文字、图形、图像、声音和语言等。数据库系统(DataBase System,DBS)是一个采用了数据库技术,有组织地、动态地存储大量相关联数据,从而方便多用户访问的计算机系统。广义上讲,DBS包括了数据库管理系统(DataBase Management System,DBMS)。
  数据库(DataBase,DB)是统一管理的、长期储存在计算机内的,有组织的相关数据的集合。其特点是数据间联系密切、冗余度小、独立性较高、易扩展,并且可为各类用户共享。DBMS是数据库系统的核心软件,是由一组相互关联的数据集合和一组用以访问这些数据的软件组成。

数据模型

  数据库的基础结构是数据模型,是用来描述数据的一组概念和定义。数据模型的三要素是数据结构、数据操作和数据的约束条件。

  1. 数据结构。对象类型的集合,是对系统静态特性的描述。
  2. 数据操作。对数据库中各种对象(型)的实例(值)允许执行的操作集合,包括操作及操作规则。如操作有检素、插入、删除和修改,操作规则有优先级等。数据操作是对系统动态特性的描述。
  3. 数据的约束条件。是一组完整性规则的集合。也就是说,对于具体的应用数据必须遵循特定的语义约束条件,以保证数据的正确、有效和相容。

数据库管理系统

1.DBMS功能
DBMS功能主要包括数据定义、数据库操作、数据库运行管理、数据组织、存储和管理、数据库的建立和维护。

  1. 数据定义
    DBMS提供数据定义语言(Data Definition Language,DDL),可以对数据库的结构进行描述,包括外模式、模式和内模式的定义;数据库的完整性定义:安全保密定义,如口令、级别和存取权限等。这些定义存储在数据字典中,是DBMS运行的基本依据。
  2. 数据库操作
    DBMS向用户提供数据操纵语言(Data Manipulation Language,DML),实现对数据库中数据的基本操作,如检索、插入、修改和删除。
  3. 数据库运行管理。
    数据库在运行期间,多用户环境下的并发控制、安全性检查和存取控制、完整性检查和执行、运行日志的组织管理、事务管理和自动恢复等都是DBMS的重要组成部分。这些功能可以保证数据库系统的正常运行。
  4. 数据组织、存储和管理。
    DBMS分类组织、存储和管理各种数据,包括数据字典、用户数据和存取路径等。要确定以何种文件结构和存取方式在存储级别上组织这些数据,以提高存取效率。实现数据间的联系、数据组织和存储的基本目标是提高存储空间的利用率。
  5. 数据库的建立和维护。
    数据库的建立和维护,包括数据库的初始建立、数据的转换、数据库的转储和恢复、数据库的重组和重构、性能监测和分析等。
  6. 其他功能。
    如DBMS与网络中其他软件系统的通信功能,一个DBMS与另一个DBMS或文件系统的数据转换功能等。

数据库三级模式

  从数据库管理系统的角度,数据库也分为三级模式,分别是外模式、概念模式和内模式

  1. 视图层(View Level)是最高层次的抽象,描述整个数据库的某个部分的数据。
  2. 逻辑层(Logical Level)是比物理层更高一层的抽象,描述数据库中存储的数据以及这些数据间存在的关系。
  3. 物理层(Physical Level)是最低层次的抽象,描述数据在存储器中是如何存储的。物理层详细地描述复杂的底层结构。

  数据库系统采用三级模式结构,这是数据库管理系统内部的系统结构。数据库有“型”和“值”的概念,“型”是指对某一数据的结构和属性的说明,“值”是型的一个具体赋值。

关系数据库

关系的基本术语

  1. 属性(Attribute):在现实世界中,要描述一个事物常常取若干特征来表示。这些特征称为属性。例如学生通过学号、姓名、性别、系别、年龄、籍贯等屆性米描述。
  2. (Domain):每个属性的取值范围对应一个值的集合,称为该属性的域。例如,学号的域是6位整型数:姓名的域是10位字符:性别的域为{男,女}等。一般在关系数据模型中,对域还加了一个限制,即所有的城都应是原子数据(Atomic Data)。
  3. 目或度(Degree):目或度指的是一个关系中属性的个数。
  4. 候选码(Candidate Key):若关系中的某一属性或属性组的值能唯一的标识一个元组,则称该属性或属性组为候选码。
  5. 主码(Primary Key):或称主键,若—个关系有多个候选码,则选定其中一个作为主码。
  6. 主属性(Prime Atribute):包含在任何候选码中的属性称为主属性。不包含在任何候选码中的属性称为非主属性(Non-Prime Attribute)。
  7. 外码(Foreign Key):如果关系模式R中的属性或属性组不是该关系的码,但它是其他关系的码,那么该属性集对关系模式R而言是外码。
  8. 全码(All-key):关系模型的所有属性组是这个关系模式的候选码,称为全码。
    例如,关系模式R(T,C,S),属性T表示教师,属性C表示课程,属性S表示学生。假设一个教师可以讲授多门课程,某门课程可以由多个教师讲授,学生可以听不同教师讲授的不同课程,那么,要想区分关系中的每一个元组,这个关系模式R的码应为全属性T、C和S,即ALL-KEY。
  9. 笛卡尔积

关系的完整性约束

  (1)实体完整性(Entity Integrity)。实体完整性规则要求每个数据表都必须有主键,而作为主键的所有字段,其属性必须是唯一且非空值。
  (2)参照完整性(Referential Integrity)。现实世界中的实体之间往往存在某种联系,在关系模型中实体及实体间的联系是用关系来描述的,这样自然就存在着关系与关系间的引用。若在关系模式主属性上加实下画线,通常表示该属性为主码属性:如果在关系模式属性上加虚下画线,通常表示该属性为外码属性。
  (3)用户定义完整性(User Defined Integrity)。就是针对某一具体的关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求,由应用的环境决定。例如,银行的用户账户规定必须大于等于100000,小于999999。

关系运算

连接(Join)

  • 1)等值连接(Equijoin)
  • 2)自然连接(Natural Join)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果集中将重复属性列去掉

  特别需要说明的是:一般连接是从关系的水平方向运算,而自然连接不仅要从关系的水平方向,而且也要从关系的垂直方向运算。因为自然连接要去掉重复属性,如果没有重复属性,那么自然连接就转化为笛卡儿积。

外连接(OuterJion)
  外连接运算是连接运算的扩展,可以处理缺失的信息。外连接运算有三种:左外连接、右外连接和全外连接。

  1. 左外连接(Left Outer Jion)
    左外连接:取出左侧关系中所有与右侧关系中任一元组都不匹配的元组,用空值null充填所有来白右侧关系的属性,构成新的元组,将其加入自然连接的结果中。
  2. 右外连接(Right OuterJion)
    右外连接:取出右侧关系中所有与左侧关系中任一元组都不匹配的元组,用空值null填充所有来自左侧关系的属性,构成新的元组,将其加入自然连接的结果中。
  3. 全外连接(Full OuterJion)全外连接:完成左外连按和右外连按的操作。即填充左侧关系中所有与右侧关系中任一元组都不匹配的元组,又填充右侧关系中所有与左侧关系中任一元组都不匹配的元组,将产生的新元组加入自然连接的结果中。

规范化

  1. 1NF
    【定义6.7】若关系模式R的每一个分量都是不可再分的数据项,则关系模式R属于第一范式。
  2. 2NF
    【定义6.8】若关系模式满足第一范式,且每一个非主属性完全依赖于码,则关系模式。
  3. 3NF
    在满足第二范式的基础上,消除了非主属性对码的传递函数依赖

数据库设计

数据库设计的基本步骤

  一般将数据库设计分为如下6个阶段。

  • (1)用户需求分析。数据库设计人员采用一定的辅助工具对应用对象的功能、性能、限制等要求进行科学的分析。
  • (2)概念结构设计。概念结构设计是对信息分析和定义,如视图模型化、视图分析和汇总。对应用对象精确地抽象、概括而形成独立于计算机系统的企业信息模型。描述概念模型的较理想的工具是E-R图。
  • (3)逻辑结构设计。将抽象的概念模型转化为与选用的DBMS产品所支持的数据模型相符合的逻辑模型,它是物理结构设计的基础。包括模式初始设计、子模式设计、应用程序设计、模式评价以及模式求精。
  • (4)物理结构设计。是逻辑模型在计算机中的具体实现方案。
  • (5)数据库实施阶段。数据库设计人员根据逻辑设计和物理设计阶段的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。
  • (6)数据库运行和维护阶段。数据库应用系统经过试运行即可投入运行,但该阶段需要不断地对系统进行评价、调整与修改。

NoSQL数据库

  NoSQL最常见的解释是Non-Relational,Not Only SQL也被很多人接受。NOSQL仅仅是一个概念,泛指非关系型的数据库,区别于关系数据库,它们不保证关系数据的ACID特性。对NoSQL最普遍的解释是“非关联型的”,强调Key-Value Stores和文档数据库的优点,而不是单纯的反对RDBMS。NoSQL数据库的产生就是为了面对大规模数据集合和多重数据种类带来的挑战,特别是大数据应用难题。

分类与特点

  当前出现了很多不同类型、面向不同应用的NoSQL产品,按照所使用的数据结构的类型,一般可以将NOSQL数据库分为以下4种类型。

  1. 列式存储数据库
    行式数据库即传统的关系型数据库,数据按记录存储,每一条记录的所有属性存储在一行。列式数据库是按数据库记录的列来组织和存储数据的,数据库中每个表由一组页链的集合组成,每条页链对应表中的一个存储列。这类数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。现有产品如Cassandra、HBase、Riak。
  2. 键值对存储数据库
    键值存储的典型数据结构一般为数组链表:先通过Hash算法得出Hashcode,找到数组的某一个位置,然后插入链表。
    这类数据库主要会用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据。Key-value模型对于1T系统来说,其优势在于简单、易部署。但是如果数据库管理员只对部分值进行查询或更新的时候,Key-value就品得效率低下了。现有产品如TokyoCabinet/Tyrant、Redis.Voldemort.OracleBDB.
  3. 文档型数据库
    文档型数据库同键值对存储数据库类似。文档型数据库的灵感来自于LotusNotes办公软件,而且它同键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是键值数据库的升级版,允许嵌套键值,在处理网页等复杂数据时,文档型数据库比传统键值数据库的查询效率更高。现有产品如CouchDB、MongoDb,国内也有文档型数据库SequoiaDB,已经开源。
  4. 图数据库
    图形结构的数据库同其他采用行列以及刚性结构的SQL数据库不同,它使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要指定数据模型。许多NoSQL数据库都有REST式的数据接又或者查询API。适合存储通过图进行建模的数据,例如社交网络数据,生物信息网络数据,交通网络数据等。常见的产品有Neo4j、InfoGrid、InfiniteGraph等。

目前业界对于NoSQL并没有一个明确的范围和定义,但是它们普遍存在下面一些共同特征:

  • 易扩展:去掉了关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。
  • 大数据量,高性能:NoSQL数据库都具有非常高的读写性能,尤其在大数据量下。这得益于它的无关系性,数据库的结构简单。
  • 灵活的数据模型:NoSQL无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。
  • 高可用:NoSQL在不太影响性能的情况下,就可以方便地实现高可用的架构,有些产品通过复制模型也能实现高可用。

体系框架

  NOSQL整体框架分为4层,由下至上分为数据持久层(Data Persistence)、数据分布层(Data Distribution Model)、数据逻辑模型层(Data Logical Model)和接口层(Interface),层次之间相辅相成,协调工作。

  1. 数据持久层定义了数据的存储形式,主要包括基于内存、硬盘、内存和硬盘接口、订制可插拔4种形式。基于内存形式的数据存取速度最快,但可能会造成数据丢失;基于硬盘的数据存储可能保存很久,但存取速度慢于基于内存形式的数据:内存和硬盘相结合的形式,结合了前两种形式的优点,既保证了速度,又保证了数据不丢失:订制可插拔则保证了数据存取具有较高的灵活性。
  2. 数据分布层定义了数据是如何分布的,相对于关系型数据库,NoSQL可选的机制比较多,主要有3种形式:一是CAP支持,可用于水平扩展;二是多数据中心支持,可以保证在横跨多数据中心时也能够平稳运行:三是动态部署支持,可以在运行着的集群中动态地添加或删除结点。
  3. 数据逻辑层表述了数据的逻辑表现形式。
  4. 接口层为上层应用提供了方便的数据调用接口,提供的选择远多于关系型数据库。接口层提供了5种选择:Rest、Thrift、Map/Reduce、Get/Put、特定语言API,使得应用程序和数据库的交互更加方便。

  NoSQL分层架构并不代表每个产品在每一层只有一种选择。相反,这种分层设计提供了很大的灵活性和兼容性,每种数据库在不同层面可以支持多种特性。
NoSQL数据库在以下这几种情况比较适用:

  • 数据模型比较简单;
  • 需要灵活性更强的IT系統:
  • 对数据库性能要求较高;
  • 不需要高度的数据一致性;
  • 对于给定key,比较容易映射复杂值的环境。

相关推荐

  1. 6数据库设计基础知识

    2024-06-08 21:36:06       11 阅读
  2. go 语言程序设计3--基础数据类型

    2024-06-08 21:36:06       34 阅读
  3. 7:系统架构设计基础知识-软件架构风格

    2024-06-08 21:36:06       7 阅读
  4. 【算法基础:数学知识

    2024-06-08 21:36:06       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-08 21:36:06       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-08 21:36:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-08 21:36:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-08 21:36:06       18 阅读

热门阅读

  1. 使用JDBC连接MySQL完整步骤(实测可用)

    2024-06-08 21:36:06       9 阅读
  2. linux 删除磁盘分区

    2024-06-08 21:36:06       6 阅读
  3. 2024年6月7日第十五周下午学习英语六级大纲

    2024-06-08 21:36:06       6 阅读
  4. 顶级域名和二级域名的区别

    2024-06-08 21:36:06       13 阅读
  5. oracle表锁

    2024-06-08 21:36:06       7 阅读
  6. SwiftUI四绘制路径和形状

    2024-06-08 21:36:06       7 阅读
  7. 正则表达式

    2024-06-08 21:36:06       9 阅读
  8. 为你的网站安装免费的 SSL TLS 证书

    2024-06-08 21:36:06       10 阅读
  9. STP简介

    2024-06-08 21:36:06       8 阅读
  10. 低代码开发赋能教育数字化及典型场景

    2024-06-08 21:36:06       10 阅读
  11. 【数据结构】单链表-->详细讲解,后赋源码

    2024-06-08 21:36:06       11 阅读
  12. android 异屏同显二.

    2024-06-08 21:36:06       8 阅读