数据库系统(Database System,DBS)
数据库系统(Database System,DBS)由硬件和软件共同构成。硬件主要用于存储数据库中的数据,包括计算机、存储设备等。软件部分主要包括数据库管理系统、支持数据库管理系统运行的操作系统,以及支持多种语言进行应用开发的访问技术等。
数据库(DataBase,DB)
数据库(DataBase,DB)
- 数据库(Database)指长期存储在计算机内的、有组织的、可共享的数据集合。通俗的讲,数据库就是存储数据的地方
- 提供了一个存储空间来存储各种数据,可以将数据库视为一个存储数据的容器。一个数据库可能包含许多文件,一个数据库系统中通常包含许多数据库。
数据库管理系统(Database Management System,DBMS)
数据库管理系统(DBMS)
- 数据库的核心软件之一,是位于用户与操作系统之间的数据管理软件,用于建立,使用和维护数据库。它的主要功能包括数据定义、数据操作、数据库的运行管理、数据库的建立和维护等几个方面。
- 用户创建、管理和维护数据库时所使用的软件,位于用户和操作系统之间,对数据库进行统一管理。DBMS 能定义数据存储结构,提供数据的操作机制,维护数据库的安全性、完整性和可靠性。
DBMS的主要功能
功能 | 说明 |
---|---|
数据定义 | DBMS提供数据定义语言DDL(Data Definition Language),供用户定义数据库的三级模式结构、两级映像以及完整性约束和保密限制等约束。DDL主要用于建立、修改数据库的库结构。DDL所描述的库结构仅仅给出了数据库的框架,数据库的框架信息被存放在数据字典(Data Dictionary)中。 |
数据操作 | DBMS提供数据操作语言DML(Data Manipulation Language),供用户实现对数据的追加、删除、更新、查询等操作。 |
数据库的运行管理 | 数据库的运行管理功能是DBMS的运行控制、管理功能,包括多用户环境下的并发控制、安全性检查和存取限制控制、完整性检查和执行、运行日志的组织管理、事务的管理和自动恢复,即保证事务的原子性。这些功能保证了数据库系统的正常运行。 |
数据组织、存储与管理 | DBMS要分类组织、存储和管理各种数据,包括数据字典、用户数据、存取路径等,需确定以何种文件结构和存取方式在存储级上组织这些数据,如何实现数据之间的联系。数据组织和存储的基本目标是提高存储空间利用率,选择合适的存取方法提高存取效率。 |
数据库的保护 | 数据库中的数据是信息社会的战略资源,所以数据的保护至关重要。DBMS对数据库的保护通过4个方面来实现:数据库的恢复、数据库的并发控制、数据库的完整性控制、数据库安全性控制。DBMS的其他保护功能还有系统缓冲区的管理以及数据存储的某些自适应调节机制等。 |
数据库的维护 | 这一部分包括数据库的数据载入、转换、转储、数据库的重组合重构以及性能监控等功能,这些功能分别由各个使用程序来完成。 |
通信 | DBMS具有与操作系统的联机处理、分时系统及远程作业输入的相关接口,负责处理数据的传送。对网络环境下的数据库系统,还应该包括DBMS与网络中其他软件系统的通信功能以及数据库之间的互操作功能。 |
数据库应用程序(DataBase Application)
数据库应用程序(DataBase Application)的使用可以满足对数据管理的更高要求,还可以使数据管理过程更加直观和友好。数据库应用程序负责与 DBMS 进行通信、访问和管理 DBMS 中存储的数据,允许用户插入、修改、删除数据库中的数据。
数据库管理员(Database Administrator,DBA)
- DBA是数据库管理员是维护和管理数据库的专门人员
- DBMS提供方便、有效地存取数据库信息的接口和工具,编程人员可通过编程语言与数据库之间的接口进行数据库应用程序的开发。
- 数据库管理员(Database Administrator,DBA)可通过提供的工具对数据库进行管理。
数据库的所有者(Database Owner,DB0)
- dbo是Database Owner(数据库的所有者)的缩写
关系型数据库(Relational Database,RDB)
关系型数据库是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。简单说,关系型数据库是由多张能互相连接的表组成的数据库。
在 RDBMS (关系型数据库)当中,SQL 语句是逐条执行的,一条 SQL 语句代表着数据库的一个操作。
优点
- 都是使用表结构,格式一致,易于维护。
- 使用通用的 SQL 语言操作,使用方便,可用于复杂查询。
- 数据存储在磁盘中,安全。
缺点
- 读写性能比较差,不能满足海量数据的高效率读写。
- 不节省空间。因为建立在关系模型上,就要遵循某些规则,比如数据中某字段值即使为空仍要分配空间。
- 固定的表结构,灵活度较低。
常见的关系型数据库有 Oracle、DB2、PostgreSQL、Microsoft SQL Server、Microsoft Access 和 MySQL 等。
非关系型数据库
非关系型数据库又被称为 NoSQL(Not Only SQL ),意为不仅仅是 SQL。通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定。
优点
- 非关系型数据库存储数据的格式可以是 key-value 形式、文档形式、图片形式等。使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
- 速度快,效率高。 NoSQL 可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘。
- 海量数据的维护和处理非常轻松。
- 非关系型数据库具有扩展简单、高并发、高稳定性、成本低廉的优势。
- 可以实现数据的分布式处理。
缺点
- 非关系型数据库暂时不提供 SQL 支持,学习和使用成本较高。
- 非关系数据库没有事务处理,没有保证数据的完整性和安全性。适合处理海量数据,但是不一定安全。
- 功能没有关系型数据库完善。
常见的非关系型数据库有 Neo4j、MongoDB、Redis、Memcached、MemcacheDB 和 HBase 等。
数据冗余
数据冗余是指数据之间的重复,也可以说是同一数据存储在不同数据文件中的现象。
结构化查询语言(Structured Query Language,SQL)
- 对数据库进行查询和修改操作的语言叫做 SQL
- SQL 是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统
- SQL 集数据定义、数据操作和数据控制于一体,可以完成数据库中的全部工作
- 大多数数据库都支持通用的 SQL 语句,同时不同的数据库具有各自特有的 SQL 语言特性
- SQL包括数据定义语言(Data Definition Language,DDL)、数据操作语言(Data Manipulation Language,DML)、数据查询语言(Data Query Language,DQL)、数据控制语言(Data Control Language,DCL)等,参考 区别与理解
SQL的书写规范
- SQL 语句不区分大小写,许多 SQL 开发人员习惯对 SQL 本身的关键字进行大写,而对表或者列的名称使用小写,这样可以提高代码的可阅读性和可维护性。
- SQL 语句要以分号
;
结尾 - SQL 语句不区分大小写,但是插入到表中的数据是区分大小写的
- SQL 语句中含有字符串的时候,需要像 ‘abc’ 这样,使用英文单引号
'
将字符串括起来,用来标识这是一个字符串 - SQL 语句中含有日期的时候,同样需要使用英文单引号将其括起来。日期的格式有很多种(‘26 Jan 2010’ 或者’10/01/26’ 等),推荐使用 ‘2020-01-26’ 这种
'年-月-日'
的格式 - 在 SQL 语句中书写数字的时候,不需要使用任何符号标识,直接写成 1000 这样的数字即可
- 列名不是字符串,不能使用单引号。在MySQL中可以用倒引号``把表名和列名括起来
- SQL 语句的单词之间必须使用半角空格(英文空格)或换行符来进行分隔。没有分隔的语句会发生错误,无法正常执行
- 不能使用全角空格(中文空格)作为单词的分隔符,否则会发生错误,出现无法预期的结果
- SQL 语句中的标点符号必须都是英文状态下的,即半角字
数据库的组织和结构(schema)
schema
,中文翻译为模式,就是数据库对象的集合,这个集合包含了各种对象,包含了schema对象,可以是表(table)、列(column)、数据类型(data type)、视图(view)、存储过程(stored procedures)、关系(relationships)、主键(primary key)、外键(foreign key)等。
为了区分不同的集合,就需要给不同的集合起不同的名字,默认情况下一个用户对应一个集合,用户的schema
名等于用户名,并作为该用户缺省schema。所以schema集合看上去像用户名。
我们可以这么来看:
- database
看作是一个仓库,仓库里有很多房间(schema)
- dba
是仓库管理员
- schema
是仓库很多房间下的一个房间,一个schema代表一个房间
- user
是房间管理员,一个房间管理员可以拥有多个房间,有操作数据库中每个房间的权利,这个schema的主人,拥有schema的管理权限,就是说每个数据库映射的user
有每个schema
(房间)的钥匙。我们访问一个表时,没有指明该表属于哪一个schema中的,系统就会自动给我们在表上加上缺省的shema名。在数据库中一个对象的完整名称为schema.object,而不属于user.object。
- table
是每个房间中的储物柜
- rows
是储物柜里的行
- columns
是储物柜里的列
- data
是存储在储物柜里面的物品
MySQL
-
在MySQL中创建一个Schema和创建一个Database的效果是一样的,
CREATE SCHEMA
和CREATE DATABASE
是等效的 -
参见官网:MySQL 8.0 Reference Manual
CREATE DATABASE
creates a database with the given name. To use this statement, you need theCREATE
privilege for the database.CREATE SCHEMA
is a synonym forCREATE DATABASE
.
SQL Server
-
在SQL Server中,CREATE SCHEMA会按照名称来创建一个模式,与MySQL不同,CREATE SCHEMA语句创建了一个单独定义到数据库的模式。
-
在SQL Server 2000中,user和schema总有一层隐含的关系,让我们很少意识到其实user和schema是两种完全不同的概念,假如我们在某一数据库中创建了用户Scott,那么此时后台也为我们默认的创建了schema【Scott】,schema的名字和user的名字相同。
-
在SQL Server 2005中,为了向后兼容,当用sp_adduser存储过程创建一个用户的时候,sqlserver2005同时也创建了一个和用户名相同的schema,然而这个存储过程是为了向后兼容才保留的,当我们用create user创建数据库用户时,我们可以用该用户指定一个已经存在的schema作为默认的schema,如果我们不指定,则该用户所默认的schema即为dbo schema,dbo是Database Owner(数据库的所有者)的缩写,dbo房间(schema)好比一个大的公共房间,在当前登录用户没有默认schema的前提下,如果你在大仓库中进行一些操作,比如create table,如果没有制定特定的房间(schema),那么你的物品就只好放进公共的dbo房间(schema)了。但是如果当前登录用户有默认的schema,那么所做的一切操作都是在默认的schema上进行。
-
在SQL Server中,一旦创建了模式,就可以往模式中添加用户和对象。
-
参见官网:SQL Server Glossary
| database schema | The names of tables, fields, data types, and primary and foreign keys of a database. |
Oracle Database
-
Oracle中的schema系统与其他数据库系统大不相同,Oracle的schema与数据库用户密切相关
-
在Oracle数据库中不能新建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决,在创建一个用户的同时为这个用户创建一个与用户名同名的schem并作为该用户的缺省schema。即schema的个数同user的个数相同,而且schema名字同user名字一一 对应并且相同。
-
Oracle官方文档指出,schema是数据或模式对象的逻辑结构的集合,由数据库用户拥有,并且与该用户具有相同的名称,也就是说每个用户拥有一个独立的schema。
-
参见官网:Oracle Database Objects & Schema Objects
Database Objects
Oracle Database recognizes objects that are associated with a particular schema and objects that are not associated with any particular schema, as described in the sections that follow.Schema Objects
A schema is a collection of logical structures of data, or schema objects. A schema is owned by a database user and has the same name as that user. Each user owns a single schema. Schema objects can be created and manipulated with SQL
PostgreSQL
- PostgreSQL中模式的概念与MySQL中Database的概念是等同的。
- 在MySQL中可以同时访问多个Database对象,但在PostgreSQL中只能访问一个Database对象,但在PostgreSQL中可以访问多个Scheme。