Skip to content
 

关系型和非关系型数据库

更新: 10/9/2025字数: 0 字 时长: 0 分钟

一、关系型数据库(Relational Database,RDBMS)

关系型数据库是基于表格结构存储数据,每条数据称为一条记录(Row),每个字段称为列(Column),表之间通过主键、外键建立关系。

特点

特点说明
结构化数据数据存储在表中,字段类型固定
强一致性支持 ACID(原子性、Consistency、一致性、Isolation、隔离性、Durability、持久性)
复杂查询支持 SQL 语句,多表关联、聚合函数等
模式固定数据库表的列结构需提前定义(Schema)

常见数据库

  • MySQL
  • PostgreSQL
  • Oracle
  • SQL Server

使用场景

  • 金融系统(银行、交易)
  • 企业 ERP / CRM 系统
  • 高一致性要求的业务

简单示例:MySQL 用户表

sql
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100),
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

关系型数据库适合结构化、强一致性数据,方便复杂查询和事务处理。

二、非关系型数据库(NoSQL)

非关系型数据库(NoSQL)是一类非表格结构的数据库,通常用于存储非结构化或半结构化数据,支持高性能、高扩展性需求。

特点

特点说明
灵活数据模型可存储 JSON、键值对、文档、图等形式
高扩展性水平扩展(Sharding)容易
弱一致性通常遵循 BASE 原则(基本可用、柔性状态、最终一致性)
性能优先适合海量数据快速读写

类型

类型说明常见数据库
键值(Key-Value)以 key 存取 valueRedis、Memcached
文档(Document)JSON/ BSON 形式存储MongoDB、CouchDB
列族(Column-Family)面向列存储HBase、Cassandra
图数据库(Graph)节点和边存储Neo4j、JanusGraph

使用场景

  • 高并发读写缓存(Redis)
  • 社交关系数据(图数据库)
  • 日志存储 / 大数据分析(HBase、Cassandra)
  • 灵活文档存储(MongoDB)

简单示例:MongoDB 用户文档

json
{
  "_id": "64f1a2b5c3d4e5f6",
  "username": "alice",
  "email": "alice@example.com",
  "created_at": "2025-10-09T10:00:00Z"
}

非关系型数据库适合高并发、海量数据、灵活结构的场景,牺牲部分一致性来换取性能和扩展性。

三、关系型 vs 非关系型数据库对比

特性关系型 (RDBMS)非关系型 (NoSQL)
数据结构表格(行列)键值、文档、列族、图
模式固定 Schema灵活,可变字段
一致性强一致性 ACID弱一致性 BASE
扩展性垂直扩展为主水平扩展方便
查询语言SQL不同类型数据库有不同 API
性能复杂查询强高并发、大数据场景快
典型场景金融、ERP缓存、日志、大数据、社交关系

四、怎么理解主键和外键

4.1 主键(Primary Key)

主键是用来唯一标识表中每一行记录的字段。每个表只能有一个主键,主键值必须是唯一的且不能为 NULL。它确保表中的每一条记录都有唯一标识。

例子:在学生表中,Student_ID 可以作为主键,因为每个学生的学号都是唯一的。

4.2 外键(Foreign Key)

外键是一个表中的字段,它指向另一个表的主键,用来建立两个表之间的联系。外键确保数据的完整性和一致性,外键列的值必须在目标表的主键列中存在。

例子:在成绩表中,Student_ID 可以作为外键,指向学生表中的 Student_ID,表示成绩记录属于哪个学生。

4.3 例子:

假设我们有两个表:

  1. 学生表students):
学号(Student_ID)姓名(Name)年龄(Age)
1001张三20
1002李四22
1003王五21
  1. 成绩表grades):
学号(Student_ID)课程(Course)成绩(Grade)
1001数学90
1002英语85
1001物理88

在这个例子中,grades 表中的 Student_ID 是外键,它引用了 students 表中的 Student_ID 主键。这样,我们就能知道每一条成绩记录对应的是哪个学生。外键确保了成绩表中每个学生的学号必须存在于学生表中,从而保证数据的关联性和完整性。

五、实体,属性,关系简述

在数据库建模中,实体(Entity)属性(Attribute)和关系(Relationship)是三个基本概念,它们用来描述现实世界中的数据和数据之间的关系。

5.1 实体(Entity)

实体表示现实世界中的一个对象或事物,它可以是具体的也可以是抽象的,通常指的是我们需要存储数据的对象。

  • 例子:学生、课程、员工、订单等。
  • 实体通常被表示为表格中的一行。

5.2 属性(Attribute)

属性是描述实体特征的字段或数据项。每个实体通常有多个属性,用于详细描述该实体的特征。

  • 例子:对于一个“学生”实体,属性可以是 Student_ID(学号)、Name(姓名)、Age(年龄)等。

5.3 关系(Relationship)

关系表示不同实体之间的联系或互动。在数据库中,关系通常表示表与表之间的关联。

  • 例子:学生与课程之间的关系,可以是“选修”关系,表示哪个学生选了哪些课程。
  • 关系在数据库中通过外键来实现。

总结:

  • 实体:表示现实世界中的事物(例如:学生、课程)。
  • 属性:描述实体的特征(例如:学生的姓名、年龄)。
  • 关系:描述不同实体之间的联系(例如:学生选修课程)。

我见青山多妩媚,料青山见我应如是。