关系数据库
(英语:Relational database),是创建在关系模型基础上的数据库
,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示
。关系模型
是由埃德加·科德于1970年
首先提出的,并配合“科德十二定律”。现如今虽然对此模型有一些批评意见,但它还是数据存储的传统标准
。标准数据查询语言SQL就是一种基于关系数据库的语言
,这种语言执行对关系数据库中数据的检索和操作
。
关系模型由关系数据结构
、关系操作集合
、关系完整性
约束三部分组成。
实体关系模型
(Entity-Relationship Model),简称E-R Model,是陈品山(Peter P.S Chen)博士于1976年提出的一套数据库的设计工具,他运用真实世界中事物
与关系的观念
,来解释数据库中的抽象的数据架构
。实体关系模型利用图形的方式(实体-关系图
(Entity-Relationship Diagram))来表示数据库的概念设计
,有助于设计过程中的构思
及沟通讨论
。
A.数据查询
B.数据操作
完整性约束包括:
实体完整性
参照完整性
用户定义完整性
SQL
(Structured Query Language)语言是1974
年由Boyce和Chamberlin提出的一种介于关系代数与关系演算
之间的结构化查询语言
,是一个通用
的、功能极强的关系性数据库语言
。
外模式
模式
内模式
表(关系Relation)是以列
(值组Tuple
)和行
(属性Attribute
)的形式组织起来的数据的集合
。一个数据库包括一个或多个表
(关系Relation)。例如,可能有一个有关作者信息的名为authors的表(关系Relation)。每行(属性Attribute)都包含特定类型的信息,如作者的姓氏
。每列
(值组Tuple)都包含有关特定作者的所有信息:姓、名、住址等等
。在关系型数据库当中一个表(关系Relation)就是一个关系,一个关系数据库可以包含多个表(关系Relation)
视图表 (View) 是在关系数据库中,将一组查询指令构成的结果集
,组合成可查询的数据表的一种数据库对象
。与数据表不同的是,数据表是一种实体结构
(Physical Structure),但视图表是一种虚拟结构
(Virtual Structure),在实体数据表中的改变都可以立刻反映在视图表中,不过部分数据库管理系统也支持具更新能力的视图表(Updatable View)。
视图表具有下列的好处:
实体数据表隐藏起来
,让外部程序的设计师无法得知实际的数据结构,降低数据库被攻击的风险
。在多数的情况下,视图表是只读的
,外部程序无法直接透过视图表修改数据(具更新能力的视图表除外)。简化查询
,数据库管理员可以将高度复杂的查询,包装在视图表中,外部程序只需要直接访问该视图表即可取出需要的数据。
数据表
,具有 JOIN
的能力。存储定义
,无须存储数据
。语法
视图表由于是数据库对象之一
,因此需要使用数据定义语言来创建
,修改与删除
,例如下列的指令:
CREATE VIEW v_myView
AS
SELECT * FROM myTable
即可创建一个视图表
,而外部程序可以用下列指令来访问视图表
:
SELECT * FROM v_myView WHERE myID = 3982
若要删除视图表
,则可以用DROP VIEW
v_myView来删除。
数据库索引
,是数据库管理系统中一个排序的数据结构
,以协助快速查询
、更新数据库表
中数据。
聚集索引
索引键值的逻辑顺序
与索引所服务的表中相应行的物理顺序相同
的索引
,被称为聚集索引
,反之为非聚集索引,索引一般使用二叉树排序索引键值
的,聚集索引的索引值是直接指向数据表对应元组
的,而非聚集索引的索引值仍会指向下一个索引数据块
,并不直接指向元组,因为还有一层索引进行重定向,所以非聚集索引可以拥有不同的键值排序而拥有多个不同的索引。而聚集索引因为与表的元组物理顺序
一一对应,所以只有一种排序
,即一个数据表只有一个聚集索引
。
NOSQL(Not Only SQL)是对不同于传统的关系数据库的数据库管理系统的统称。
允许部分数据使用SQL系统存储,而其他数据允许使用NOSQL系统存储。其数据存储可以不需要固定的表格模式以及中介数据
(metadata),也经常会避免使用SQL的JOIN操作
,一般有水平可扩展性
的特征。
NOSQL
一词最早出现于1998
年,是Carlo Strozzi开发的一个轻量
、开源
、不提供SQL功能的关系数据库
。
2009
年,Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库
的讨论,来自Rackspace的Eric Evans再次提出了NOSQL的概念,这时的NOSQL主要指非关系型、分布式、不提供ACID的数据库设计模式
。
2009年在亚特兰大举行的"no:sql(east)“讨论会是一个里程碑,其口号是"select fun, profit from real_world where relational=false;”。因此,对NOSQL最普遍的解释是“非关联型的”,强调键-值存储
和面向文档数据库
的优点,而不是单纯的反对RDBMS。
基于2014年的收入,NOSQL市场领先企业是MarkLogic,MongoDB
和Datastax[3]。基于2015年的人气排名
,最受欢迎的NOSQL数据库是MongoDB
,Apache Cassandra
和Redis
。
当代典型的关系数据库在一些数据敏感的应用中表现了糟糕的性能,例如为巨量文档创建索引
、高流量网站的网页服务
,以及发送流式媒体
。关系型数据库的典型实现主要被调整用于执行规模小而读写频繁
,或者大批量读而极少写访问的事务
。
NOSQL的结构通常提供弱一致性的保证
,如最终一致性,或交易仅限于单个的数据项。不过,有些系统,提供完整的ACID保证在某些情况下,增加了补充中间件层(例如:CloudTPS)。有两个成熟的系统有提供快照隔离的列存储
:像是Google基于过滤器系统的BigTable
,和滑铁卢大学开发的HBase
。这些系统,自主开发,使用类似的概念来实现多行
(multi-row)分布式ACID交易的快照隔离(snapshot isolation)保证为基础列存储,无需额外的数据管理开销,中间件系统部署或维护,
减少了中间件层。
少数NOSQL系统部署了分布式结构,通常使用分布式散列表(DHT)将数据以冗余方式保存在多台服务器上。依此,扩充系统时候添加服务器更容易,并且扩大了对服务器失效的承受能程度。
后面博主会持续更新,
喜欢的小伙伴可以关注
或者点赞
和评论
,一键三连呦
…
但行好事
,莫问前程
,下篇见~