《数据库系统概念》1-数据抽象、模型及SQL
DBMS(database-management system)包括数据库和用于存取数据的程序,DBMS的基本目标是为数据的存取提供方便、高效的方式,此外对大多数企业来说,数据是非常重要的,所以DBMS还要保证数据的安全,比如在系统奔溃或收到未授权访问请求的时候。
一、数据抽象
a) 数据库系统隐藏了数据在存储、维护方面的细节,以视图的形式为用户提供数据。数据库系统必须能满足高效地查询数据的需求,为此设计者将数据库系统抽象为三层:物理层、逻辑层、视图层
b) 物理层,描述了数据在物理存储介质的实际存储方式;
逻辑层,描述了数据在数据库的存储方式以及数据之间的逻辑关系,尽管为了实现这些逻辑关系需要复杂的物理关系,逻辑层为用户隐藏了这些复杂性。
视图层,是对数据库最高级别的抽象,虽然逻辑层隐藏了物理层的复杂度,但对于一个完整的数据库所储存的信息来说,逻辑层仍然是非常复杂的,除了DBA有时可能直接操作逻辑层,普通用户往往只需要访问其中的一部分数据,视图层就是为了简化普通用户与数据库的交互而存在的。同一个数据库可以有多份视图。
c) 随着数据的增删改,数据库会不断变化。在某一刻数据库中所有信息的集合称为Instance;而数据库的整体结构称为Schema,Schema很少发生变化。用程序来类比的话,Schema相当于预先声明的变量,Instance则相当于变量的值。
数据库有不同的分层,对应就有不同的Schema,视图层甚至有多个subschema。
二、数据模型
数据模型是用于描述数据、数据关系、数据语义、一致性约束的一系列工具的集合。数据模型可以从物理、逻辑、视图的层面描述数据库的设计,有多种类型:
a) Relational Model
关系模型用表来描述数据及相互关系,每张表有多个列,每个列有唯一的名称,表和表之间又存在一定的关系。关系模型是一种基于记录的模型,采用这种模型记录的数据都有固定数量的字段或属性(列),这种模型的使用最为广泛。
b) Entity-Relationship Model
E-R模型用了实体和实体间关系这样的概念,实体对应于现实世界的对象。这种模型也被广泛使用。
c) Object-Based Data Model
由于面向对象的编程语言成为主流,基于对象的数据模型也应运而生,这种模型结合和关系模型和E-R模型的特性,并增加了封装、方法等面向对象的思想。
d) Semistructured Data Model
在XML等半结构化的数据模型中,允许数据有不同的字段,这与之前的模型都不相同。
三、数据库语言
SQL包含DDL(data-definition language)和DML(data-manpulate language)。
a) DML
DML用于对数据的操作如增删改查,分为过程化DML和非过程化DML,前者在使用时要指定需要操作的数据以及操作的方式,后者只需要指定需要的数据就可以了,剩下的交给数据库系统(将查询语句翻译成对物理层的操作),所以后者更容易学习和使用。
b) DDL
DDL用于定义数据的schema、存取方式、约束等。
域约束(domain constraints):对数据类型的约束,每次插入数据都会检查
参照完整性(referential
ingegrity):要保证被关联的对象是存在的,比如course表中dept_name与department表的某列关联,那么dept_name的值必须是department实际存在的。数据库的修改有可能会破坏参照完整性,这时应该阻止操作以避免破坏参照完整性。
断言(assertions):是数据库在任何时候都必须满足的条件,域约束和参照完整性是特殊的断言。一般的对类似“每个部门必须提供至少5个节目”这样的限制就可以创建断言,然后每次对数据改动前都会检查是否满足断言。
权限(authorization):常见的权限类型有读取、插入、更新、删除等,可以控制用户拥有某几项权限。
DDL语句执行的结果为数据字典,这种数据字典可以看作是只能被数据库系统维护的特殊表。数据库在进行数据的查询、操作前都会先查阅数据字典。
学习资料:Database System Concepts, by Abraham Silberschatz, Henry F.Korth, S.Sudarshan
《数据库系统概念》1-数据抽象、模型及SQL的更多相关文章
- 《数据库系统概念》10-ER模型
通过建立实体到概念模型的映射,Entity-Relationship Model可以表达整个数据库的逻辑结构,很多数据库产品都采用E-R模型来表达数据库设计. 一.E-R模型采用了三个基本概念:实体集 ...
- MySQL Workbench将模型生成SQL文件出错
采用MySQL Workbench 设计好表和表关系后,从 File | Export 菜单中,选择 Forward Engineer SQL CREATE Script(正向引擎), 将我们的模型生 ...
- 高并发第二弹:并发概念及内存模型(JMM)
高并发第二弹:并发概念及内存模型(JMM) 感谢 : 深入Java内存模型 http://www.importnew.com/10589.html, cpu缓存一致性 https://www.cnbl ...
- 数据库系统概念:SQL的数据类型与模式、授权
public class DataBase { public static void main() { } } /* 4.5 SQL的数据类型与模式 4.5.1 SQL的日期与时间类型 SQL标准支持 ...
- 数据库系统概念:基础的SQL
public class DataBase { public static void main() { } } /* 3.1 SQL查询语言概览 SQL语言有一下几个部分: 数据定义语言:提供定义关系 ...
- spark概念、编程模型和模块概述
http://blog.csdn.net/pipisorry/article/details/50931274 spark基本概念 Spark一种与 Hadoop 相似的通用的集群计算框架,通过将大量 ...
- JStorm:概念与编程模型
1.集群架构 JStorm从设计的角度,就是一个典型的调度系统,简单集群的架构如下图所示,其中Nimbus可增加一个备节点,多个Supervisor节点组成任务执行集群. 1.1.Nimbus Nim ...
- Oracle数据库概念和一些基本的SQL语句
1.数据 定义:描述事物的符号.例如:文本.音频.视频都是数据. 2.数据库 存放数据的仓库,存放在计算机中,按照一定格式存放,可以为用户共享. 3.数据库的发展阶段 1.网状数据库 2.层次数据库 ...
- [浅谈CSS核心概念] CSS布局模型:float和position
1.流动模型 HTML元素在默认情况下都是按照"流动模型"进行布局的,网上也有人称之为"普通流"."文档流"之类的.这种布局模式的特点在于: ...
随机推荐
- 阿里开源项目arthas在docker环境初始化
需求 我前一篇是在window环境下做的测试,实际情况现在的生成环境程序都部署在了docker环境下,此环境对arthas可能会缺失很多必要组件 目前的基础环境是在docker容器中,只存在基本的to ...
- java相关技术问答(二)
String为什么是final的 首先是为了安全性,final表示不可变,不可被继承,不能修改其方法保证安全 在多线程环境下,final类型的String保证线程安全 String支持字符串常量池,相 ...
- 第二篇:服务消费者(RestTemplate+ribbon)
第一篇讲了服务的注册,这篇来说说服务的调用,服务与服务的通讯是基于http restful,springcloud的服务调用是通过ribbon方式的,客户端的负载均衡. Talk is cheap.S ...
- 往github提交代码流程
一 首先在Github新建一个仓库,回到首页,点击右上角的New repository新建仓库. 二 在本地依次使用下面命令 …or create a new repository on the c ...
- maven个人总结
一.解压maven(apache-maven-3.6.0-bin.zip) ---apache-maven-3.6.0 ---bin(Binary书写) >存放二进制可执行的文件(命令),例如m ...
- epel安装第三方扩展源后,运行yum报错的解决方案
yum安装报错:Cannot retrieve metalink for repository: epel. Please verify its path and try again 解决方法: 一句 ...
- Nginx+Keepalived 实现高可用
Keepalived 是一个高性能的 服务器高可用 或 热备解决方案,Keepalived主要来防止服务器单点故障的问题,可以通过其与Nginx的配合来实现web服务端的高可用. Keepalived ...
- Linux编程 3 (初识bash shell与man查看手册)
一.初识bash shell 1.1 启动 shell GNU bash shell 能提供对Linux系统的交互式访问.通常是在用户登录终端时启动,登录时系统启动shell依赖于用户账户的配置. ...
- python中selenium操作下拉滚动条方法汇总
UI自动化中经常会遇到元素识别不到,找不到的问题,原因有很多,比如不在iframe里,xpath或id写错了等等:但有一种是在当前显示的页面元素不可见,拖动下拉条后元素就出来了. 比如下面这样一个网页 ...
- Android SD卡读写
package com.jredu.zuiyou.activity; import android.os.Bundle;import android.os.Environment;import and ...