数据库基本理论知识

发布时间 2024-01-11 05:30:07作者: 我是球啊

1. 数据库

数据库是一个以某种有组织的方式存储的数据集合。最简单的方法是将数据库想象为一个文件柜。这个文件柜是一个存放数据的物理位置,不管数据是什么,也不管数据如何组织。

数据库 (database):保存有组织的数据的容器(通常是一个文件或者一组文件)。

数据库软件应该称为数据库管理系统(DBMS)。数据库是通过DBMS创建和操纵的容器。

2. 表

当我们向文件柜中放资料时,并不是随便将它们扔进某个抽屉,而是在文件柜中创建文件,然后将相关的资料放入特定的文件中。

在数据库领域中,这种文件称为表,表是一种结构化的文件,可以用来存储某种特定类型的数据。

表 (table):某种特定类型数据的结构化清单

这里的关键在于,存储在表中的数据是同一类型的数据或清单。数据库中每个表都有一个名字来标识自己,这个名字是唯一的,没有两个相同名字的表。但是虽然相同数据库中不能两次使用相同的表名,但是在不同的数据库中完全可以使用相同的表名。

表有一些特性,这些特性定义了数据在表中如何存储,包含存储什么样的数据,数据如何分解,各部分信息如何命名等信息。描述表的这组信息就是所谓的模式(schema),模式可以用来描述数据库中特定的表,也可以用来描述整个数据库(和其中表的关系)。

什么是schema呢?(参考https://www.cnblogs.com/lxz-1263030049/

数据库中,schema是数据库的组织和结构,schema中包含了schema对象,可以是table、column、data type、view、stored procedures、relationships、primary key、foreign key等。数据库schema可以用一个可视化的图来表示,显示了数据库对象及其相互之间的关系。

以上是架构图的简单示例,显示了三个表以及它们的数据类型、表之间的关系,以及它们的主键和外键。

 这是一个更复杂的例子,在这种情况下,模式图分为四个部分:

(1)Customer Data(客户数据):与客户有关的数据,如姓名,地址等

(2)Business(业务):业务所需的数据,例如员工,商店位置,付款细节等

(3)Inventory(库存):所有产品的细节。在这里,产品是电影,所以它包含电影标题,类别,演员等数据。

(4)Views(视图):关于用于评估的数据的特别观点,所以通过这些模式图,我们可以进一步创建一个数据库,实际上,MySQL Workbench允许我们直接从图中生成一个Create Table脚本,然后我们就可以直接用这个脚本去创建一个数据库,还可以直接将一个数据库转换为一个关系图表。

 

Schema和Database是否相同

取决于数据库供应商

对schema(模式)产生疑惑的一部分原因是数据库系统倾向于以自己的方式处理模式

(1)MySQL的文档中指出,在物理上,模式与数据库是同义的,所以,模式和数据库是一回事。

(2)但是,Oracle的文档却指出,某些对象可以存储在数据库中,但不能存储在schema中。 因此,模式和数据库不是一回事。

(3)而根据这篇SQL Server技术文章SQLServer technical article,schema是数据库SQL Server内部的一个独立的实体。 所以,他们也不是一回事。

因此,取决于您使用的RDBMS,模式和数据库可能不一样。

MySQL

在MySQL中,CREATE SCHEMA创建了一个数据库,这是因为CREATE SCHEMACREATE DATABASE的同义词。 换句话说,你可以使用CREATE SCHEMA或者CREATE DATABASE来创建一个数据库。

Oracle Database

在Oracle中,CREATE SCHEMA语句实际上并不创建一个模式,这是因为已经为在创建用户时,数据库用户就已经创建了一个模式,也就是说在ORACLE中CREATE USER就创建了一个schema,CREATE SCHEMA语句允许你将schema同表和视图关联起来,并在这些对象上授权,从而不必在多个事务中发出多个SQL语句。

SQL Server

在SQL Server中,CREATE SCHEMA将按照名称创建一个模式,与MySQL不同,CREATE SCHEMA语句创建了一个单独定义到数据库的模式。和ORACLE也不同,CREATE SCHEMA语句实际创建了一个模式(前面说到这个语句在ORACLE中不创建一个模式),在SQL Server中,一旦创建了模式,就可以往模式中添加用户和对象。

总结

schema这个词可以用在很多不同的环境中,在特定数据库管理系统创建一个schema时,您需要使用DBMS特定定义模式,当你切换到一个新的数据库管理系统时,一定要查看该系统是如何定义schema的。

 

3. 列和数据类型

表由列组成,列存储表中某部分的信息。

列(column):表中的一个字段,所有表都是由一个或者多个列组成的。

数据库中每个列都有相应的数据类型。数据类型(datatype)定义了列可以存储哪些数据种类。数据类型还帮助正确地分类数据,并且在优化磁盘使用方面起重要的作用。

 

4. 行

表中的数据是按行存储的,所保存的每个记录存储在自己的行内。有时候行也被称为record。

 

5. 主键

表中的每一行都应该有一列(或几列)可以唯一标识自己。

主键(primary key):一列(或一组列),其值能够唯一标识表中的每一行。

没有主键,更新或删除表中特定行就会很困难,因为不能保证操作只涉及相关的行。

表中的任何列都可以作为主键,只要它满足以下条件:

  • 任意两行都不具有相同的主键值
  • 每一行都必须具有一个主键值(主键列不允许NULL)
  • 主键列中的值不允许修改或者更新
  • 主键值不能重用(如果某行从表中删除,它的主键不能赋给以后的新行)

当多个列作为主键时,上述条件必须应用到所有列,所有列值的组合必须是唯一的,但是单个列的值可以不唯一。

 

6. 什么是SQL

SQL是structured Query Language,一种专门用来与数据库沟通的语言。

SQL有如下优点:

  • SQL不是某个特定数据库供应商专有的语言,几乎所有重要的DBMS都支持SQL。
  • SQL简单易学
  • SQL灵活使用语言元素,可以进行非常复杂的数据库操作

 

7. 外键

外键是表中的一列,其值必须在另一表的主键中。外键是保证引用完整性的极其重要的部分。我们举个例子来理解。

Orders 表将录入到系统的每个订单作为一行包含其中。顾客信息存储在 Customers 表中。Orders 表中的订单通过顾客 ID 与 Customers 表中的 特定行相关联。顾客 ID 为 Customers 表的主键,每个顾客都有唯一的 ID。订单号为 Orders 表的主键,每个订单都有唯一的订单号。 

Orders 表中顾客 ID 列的值不一定是唯一的。如果某个顾客有多个订单, 则有多个行具有相同的顾客 ID(虽然每个订单都有不同的订单号)。同时,Orders 表中顾客 ID 列的合法值为 Customers 表中顾客的 ID。

这就是外键的作用。在这个例子中,在 Orders 的顾客 ID 列上定义了一个外键,因此该列只能接受 Customers 表的主键值。下面是定义这个外键的方法。 

其中的表定义使用了 REFERENCES 关键字,它表示 cust_id 中的任何值都必须是 Customers 表的 cust_id 中的值。 

相同的工作也可以在ALTER TABLE语句中用CONSTRAINT语法来完成: 

提示:外键有助防止意外删除

如第 6 课所述,除帮助保证引用完整性外,外键还有另一个重要作用。 在定义外键后,DBMS 不允许删除在另一个表中具有关联行的行。例如,不能删除关联订单的顾客。删除该顾客的唯一方法是首先删除相关的订单(这表示还要删除相关的订单项)。由于需要一系列的删除, 因而利用外键可以防止意外删除数据。

有的 DBMS 支持称为级联删除(cascading delete)的特性。如果启用, 该特性在从一个表中删除行时删除所有相关的数据。例如,如果启用级联删除并且从 Customers 表中删除某个顾客,则任何关联的订单行也会被自动删除。