关于数据库

数据库是一种组织和存储数据的系统,它通过一系列的规则和程序来管理数据的存取和更新。数据库可以存储各种类型的数据,包括数字、文本、图片和音频等。数据库的主要作用是允许用户有效地存储、查询和更新大量数据,并确保数据的安全和完整性。

数据库一般包含数据表、表之间的关系、索引以及一系列的程序和工具。数据表是数据库中的基本单位,每个表代表一个实体或概念,例如一个客户、一笔订单或者一篇文章等。表之间的关系可以是一对一、一对多或者多对多的关系,这些关系可以用来组织数据并进行查询。索引是加速数据检索的一种工具,它可以在数据库中快速定位数据。

数据库的种类包括关系型数据库、非关系型数据库、图形数据库等。关系型数据库是最常见的一种数据库类型,使用 SQL 作为查询语言。非关系型数据库不使用 SQL,而是使用其他的查询语言或者 API 进行数据查询。图形数据库则适用于存储和查询复杂的关系网数据,例如社交网络和知识图谱等。

数据库的应用非常广泛,包括企业内部的数据管理、电子商务、社交网络、物联网、大数据分析等领域。

数据库(Database 简称 DB) – 数据的仓库

我们例子中的: 用户数据, 学生数据, 成绩数据…

数据库管理系统(Database Management System 简称 DBMS) – 代替我们管理数据的软件, 能够操作数据仓库的软件

前面的例子,我们自己写程序把数据放到文件里, 管理文件,管理里面一行一行的数据, 有了数据库后,DBMS去做, 不是我们做, 或者说我们的程序通过DBMS来做

数据是如何存放在数据库中? 划分成不同的区域 – 一个区域就是一个"表" (table)

用在我们的例子中, 存储用户数据, 我们就建立一个用户表, 学生数据, 我们就建立一个学生表, 成绩数据就建立一个成绩表…

表中是如何存放数据的? 把数据拆成一个一个独立的信息 – 字段

用户数据 拆成 用户名, 密码. 角色 … 是不是和我们抽象成结构体或类很像?

怎样理解表? – 和你平常使用的二维表格一样, 表头, 行, 列

怎样理解列? – 列就是属性字段, 一列就是一个字段, 代表一样的信息

user表(用户表)

username password role
admin 123456 9
user 654321 1

username, password, role是字段, admin行,user行是数据…

student表(学生信息表)

grade class student_id name gender
20 1 1 郭靖
20 1 2 黄蓉
20 2 1 杨康

设计这些表要注意什么? – 数据库三大范式

数据库三大范式是指关系数据库设计中的一些规则,旨在确保数据的有效性和一致性,这些规则包括:

  1. 第一范式(1NF):保证每个列都是不可再分的原子值。每列的内容必须都是单一的数据类型(例如,不会出现将字符串和数值混在一起的情况)。此外,每一行都必须有一个唯一的标识符(主键),用来区分不同的记录。

  2. 第二范式(2NF):消除部分依赖。表中的所有非主键列必须依赖于主键,而不是只依赖于主键的一部分。如果主键由多个列组成,那么每个非主键列都必须依赖于这些列的组合,而不是单个列。

  3. 第三范式(3NF):消除传递依赖。表中的所有非主键列必须直接依赖于主键,而不是通过其他非主键列间接依赖于主键。也就是说,不应该存在非主键列通过其他非主键列来影响主键的情况。

遵守这三个范式可以有效地规范数据库设计,保证数据的一致性和正确性,减少数据冗余和数据不一致等问题的出现。

  1. 第一范式: 表中的列不能重复,(且不能分解为更多信息)

    user表 不能有两个username字段

  2. 第二范式: 有某一列, 所有的数据在这一列上不重复, 且为数据的关键属性, 这一列就叫"主键"(Primary Key)

    username 在程序中不能重复, 一个username标识一个用户 主键就是username

    student_id (学号)能做主键吗? 如果不可以怎样修改? 改成200101可以吗?

  3. 第三范式: 数据列不能依赖其他表中的非主键列

    假设成绩表:

    exam name chinese_point math_point english_point
    期中 郭靖 121 80 30

    依赖学生表中的姓名可以吗? 为什么? 还有什么不可以的?

存在表中有什么用? 容易管理, 安全有保障, 方便查询

数据库中的数据怎样使用? – 用SQL语言写段代码

如果用户都会SQL语言, 一般情况下不需要做那些MIS系统

什么是SQL? – 结构化查询语言(Structured Query Language) 它被程序员戏称为简单查询语言…

SQL 在各个数据库上都差不太多, 学会可以一直用

SQL都有什么?

  • DDL(Data Definition Language):数据定义语言,用来定义(创建)数据库对象:库、表、列等。

  • DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据)增删改。

  • DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别。(DBA用)

  • DQL(Data Query Language):数据查询语言,用来查询记录(数据)查询。

    我们主要学 DDL DML 和DQL

主流数据库有哪些

下面是常见的数据库类型和相关的开源或商业数据库:

  1. 关系型数据库:使用 SQL 作为查询语言,最广泛应用于企业级数据管理系统。
  • MySQL: 开源数据库,它是最受欢迎的关系型数据库之一,由 Oracle 公司维护和支持。
  • Oracle: 商业数据库,拥有完善的企业级管理和安全特性,适用于大型企业级应用系统。
  • Microsoft SQL Server: 商业数据库,由微软公司开发和维护,主要用于企业级应用、数据仓库和商业智能系统。
  • PostgreSQL: 开源数据库,功能强大,适用于高并发读写场景和大规模数据存储。
  • SQLite: 开源数据库,小巧灵活,可以嵌入到应用程序中使用。
  1. 非关系型数据库:不使用 SQL 作为查询语言,通常用于处理海量数据和分布式系统。
  • MongoDB: 开源数据库,属于文档型数据库,适合存储大量的非结构化数据,例如 JSON 格式文件。
  • Redis: 开源数据库,属于存储型数据库,适用于高速读写和缓存等场景。
  • Cassandra: 开源数据库,属于列型数据库,适用于分布式数据存储和大数据分析。
  • Elasticsearch: 开源数据库,属于文本搜索型数据库,适用于全文搜索、实时分析和数据可视化等场景。
  1. 图形数据库:用于存储和查询复杂的关系网数据。
  • Neo4j: 开源数据库,属于图形数据库,适用于社交网络和知识图谱等场景。
  • ArangoDB: 开源数据库,支持多模型数据管理,包括图形数据库和文档型数据库等。
  • OrientDB: 开源数据库,支持多模型数据管理,包括图形数据库、文档型数据库和键值型数据库等。

以上列举的数据库只是其中的一小部分,还有很多其他的数据库可供选择。选取特定的数据库要根据具体的业务需求和系统要求来确定。

SQL语言实践

Sqlite 实践

MySQL实践

工具