数据库是什么?
你可以把数据想象成一个个文件夹,数据库就是一个一个文件柜,这个文件柜存放着非常多的数据,无论这个数据是什么、或者是如何组织的
这里要注意,人们通常用数据库这个术语来代表他们使用的数据库软件,这是不正确的,这是以前你混淆的根源
确切的说,数据库软件应该称为DBMS,也就是数据库管理系统,数据库就是由DBMS创建和操纵的,比如我们可以在sql sever创建一个数据库
也就是说DBMS就像是一个图书管理员,你不直接访问数据库,而是利用DBMS访问数据库,让图书管理员帮你找一个文件柜。
数据库的分类?
这里所说的数据库都指的是数据库管理系统,这按照早期的数据库理论,比较流行的数据库模型有三种,分别为层次式数据库、网状数据库和关系型数据库。
而在当今的互联网企业中,最常用的数据库模式主要有两种,即关系型数据库和非关系型数据库。
关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)
在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过这些关联的表格分类、合并、连接或选取等运算来实现数据的管理。
关系型通俗的理解是,数据作为二维数组存在,你可以理解为图书馆的图书排列。
书架、楼层你可以理解为关系型的数据结构,书作为数据存在,而所有图书馆管理员就是数据库的进程,用于不同的工作。有人救火(数据修复、备份),有人整理书架、书籍(数据整理、归档),而用户进程就是指的来到图书馆的顾客,他们看书、移动书籍,而管理员就会对着维护。
关系型数据库诞生距今已有40多年了,从理论产生到发展到实现产品,例如:
常见的MySQL和Oracle数据库,Oracle在数据库领域里上升到了霸主地位,形成每年高达数百亿美元的庞大产业市场,而MySQL也是不容忽视的数据库,以至于被Oracle重金收购了。
非关系型数据库也被称为NoSQL数据库,NoSQL的本意是“Not Only SQL”,指的是非关系型数据库,而不是“NO SQL”的意思
因此,NoSQL的产生并不是要彻底否定关系型数据库,而是作为传统数据库的一个有效补充,在特定的场景下可以发挥难以想象的高效率和高性能。
NoSQL是非关系型数据库的广义定义,它打破了长久以来关系型数据库与ACID理论大一统的局面。NoSQL数据存储不需要固定的表结构,通常也不存在连续操作,在大数据存取上具备关系型数据库无法比拟的性能优势。
SQL储存数据
那么,作为关系型数据库最常见的SQL,它是怎么存储数据的?
1、表:
在你将文件夹放入文件柜的时候,不能将他们随便的扔进某个抽屉就完事了,而是在文件柜中创建文件,然后将相关的资料放入相关的文件中,这就是数据库的表。
表是一种结构化的文件,用来存储某种特定类型的数据,比如说这样的sql文件,其里面包含了20多个数据库表,每个表的名字都不应该是相同的,但是我们可以在不同的数据库里存放相同表名的数据表。
同时我们不能把学生数据与老师数据放在同一个表里,这样会我们不好提取数据,检索和访问都比较麻烦,所以我们应该创建两个表,每个清单一个表。
2、列:
列是组成表的字段信息,一张表可以有一个或者多个列组成。
我们可以这么理解,每一列都是数据库表中的每一个字段,比如下面的学生id列、学生姓名列、考试成绩列就是三个字段。
正确地将数据分解为多个列是十分重要的,比如班级和学生姓名应该是独立的列,通过将他们进行分解开,才有可能利用特定的列队数据进行排列和过滤,如果学生姓名和班级组合在了一个列里,按照班级过滤就会十分的困难。
数据库中每个列都有对应的数据类型,数据类型定义列可以存储的数据种类。
例如,如果列中存储的是数字,那么对应的数据类型应该是数值类型,如果列种存储的是日期、文本、注释、金额等,应该用恰当的数据类型规定出来。
数据类型:所容许的数据类型,每个列都应该有相对应的数据类型,限制存储的数据形式。
3、行:
数据库表中的数据是按照行进行存储的,每一行就是存储的一个数据,比如第一行是张三的数据,第二行是李四的数据。
4、主键:
表中每一行都应该有可以唯一标识自己的一列,比如学生信息表中我们不能用学生的姓名作为主键,因为我们会发现一旦出现重名的情况,我们就会出现两个不同的数据;
当然也不能用考试成绩作为主键,比如按照“90分”作为主键进行提取时我们还会提取出两个数据;
所以我们应该用学生id作为主键,因为无论如何学生id是不会重复的,它具有唯一性,所以可以作为主键。
所以主键就是唯一区分数据表行的标识,用来表示一个特定的行。
没有主键的话,我们更新或者删除表中特定的行就会十分的困难,他必须满足两个条件:
- 任意两行都不应该有相同的主键值
- 每一行都必须具有一个主键值(主键列不存在null值)
数据库中能够将不同的表进行关联,靠的就是主键,例如下面两个表:
比如上面两张图,左图是学生信息表,右图是老师信息表。左图的主键是学生ID,右图的主键是老师ID。细心的读者可能发现右图还有一个学生ID,这里的学生ID是专门用来联接用户表的,它并不是主键。只不过两张表通过学生ID这个唯一信息来关联。
但两张表关联也并不是信息能一一对应的,也会存在空缺的时候,比如:
所以,想要认知数据库的内容,首先我们先要明白sql、sql sever、my sql、oricle与数据库、数据库管理系统的区别在哪,因为很多人在学数据分析的时候,都是在网上到处找资料,不同的资料里滥用了这些名词,造成了大家的混淆,也增加了大家对于sql认知的难度。