跳到主要内容

数据模型与主键

数据模型(来源维基百科)

  • 层次模型(轻量级数据访问协议)
  • 网状模型(大型数据储存)
  • 关系模型
  • 对象模型
  • 平面模型(表格模型,一般在形式上是一个二维数组。如表格模型数据Excel)
  • 面向对象模型
  • 半结构化模型

分别对应着下图的三种关系

https://cdn.nlark.com/yuque/0/2021/jpeg/246543/1617183354195-15a6aa12-4943-4e57-bf69-ff0c6a600f9d.jpeg

⚠️关系模型已成为绝对的市场份额。简单说数据结构就是「我中有你,你中有我」

数据类型

INT整型4字节整数类型,范围约+/-21亿
BIGINT长整型8字节整数类型,范围约+/-922亿亿
REAL浮点型4字节浮点数,范围约+/-1038
DOUBLE浮点型8字节浮点数,范围约+/-10308
DECIMAL(M,N)高精度小数由用户指定精度的小数,例如,DECIMAL(20,10)表示一共20位,其中小数10位,通常用于财务计算
CHAR(N)定长字符串存储指定长度的字符串,例如,CHAR(100)总是存储100个字符的字符串
VARCHAR(N)变长字符串存储可变长度的字符串,例如,VARCHAR(100)可以存储0~100个字符的字符串
BOOLEAN布尔类型存储True或者False
DATE日期类型存储日期,例如,2018-06-22
TIME时间类型存储时间,例如,12:20:59
DATETIME日期和时间类型存储日期+时间,例如,2018-06-22 12:20:59

关系模型

  • 关系数据库建立在关系模块上,本质上是若干的存储数据的二维表,可以看做多个Excel表的集合。
  • 关系表的形成有一个重要的约束,任意两条记录不能完全重复,是可以通过某个的唯一字段来区分不同的记录。这个唯一的字段成为「主键」。

主键

  • 原则:不使用任何业务相关的字段作为主键。
  • 设计:与业务毫无关联的字符作为主键,一般把这个字段命名为ID

ID有两种类型:

  1. 自增整数
  2. 全局唯一,可快速寻址

联合主键

可以将两列作为联合主键,一般不使用,因将给关系表带来复杂度的上升

🔥主键应使用BIGINT自增或者GUID类型。主键不允许NULL

外键

  • 一对多关系,也就是所有集合和其子集的关系
  • 这时需要在子集中添加外键建立用以将两张或多张不同的关联起来
  • 外键不通过列名实现,是通过定义外键约束实现的
ALTER TABLE students
ADD CONSTRAINT fk_class_id
FOREIGN KEY (class_id)
REFERENCES classes (id);

关键:一对一、一对多、多对多