文章

数据库设计

数据库设计

1. PlantUML

Idea安装如下插件,以后用它绘制一些设计图
image-20240612220122559

中文手册下载:https://pdf.plantuml.net/PlantUML_Language_Reference_Guide_zh.pdf

2. ER图

ER图(Entity-Relationship Diagram)是一种用于描述实体间关系的图形化表示方法,主要用于数据库设计,可以清晰地展示实体、属性和实体间的联系。

三要素:

  • 实体(Entity):表示现实世界中的一个对象、事物或概念,可以具有属性和标识符。
  • 属性(Attribute):描述实体的特征或属性。每个实体可以有多个属性,如姓名、年龄、性别等。
  • 联系(Relationship):表示实体之间的连接或联系。关系可以是一对一、一对多或多对多的关系。

image-20240612220153533

  • 上述符号通常是两个成对使用,其分别表示最小值最大值。例如上述ER图中的班级学生之间的连线,班级一侧的符号表示(最小值和最大值都是一),学生一侧的符号表示(最小值是一,最大值是多),其表达的含义就是班级和学生之间的关系为一对多,一个学生只对应一个班级,而一个班级会对应多个学生(且至少对应一个学生)。

一对一 一对多 多对多

1-1: 一个人对应一个身份证

1-n:在N表中维护1的唯一字段

n-n:需要中间表

3.1. 概念模型

概念模型是一个粗略的初步设计,其只关注实体和关系,不体现最终建表所需的各种细节信息(例如实体的属性)。下图便是一个典型的简易选课系统数据库的概念模型。
image-20240612220214437

3.2. 逻辑模型

相较于概念模型,逻辑模型会包含更多的细节信息,例如实体的属性、用于关联两个实体的字段等等。需要注意的是,逻辑模型并不关注具体的数据库实现(例如MySQL或者Oracle)。下图是上述选课系统数据库的逻辑模型。

image-20240612220233123

3.3. 物理模型

相较于逻辑模型,物理模型会包含更多的与所选数据库相关的具体信息,例如存储引擎、字段类型、索引等信息。一般而言,物理模型会包含最终建表所需的所有信息,下图是上述选课系统数据库的物理模型。
image-20240612220243779

3.4. 数据库表设计最佳实践

设计规范:

  1. 明确需求迭代设计;没有一次性就设计完成的系统

  2. 统一命名规范;全部使用小写字母,多单词用 _ 连接,避免使用保留字

  3. 合理选择数据类型、大小、NULL值

    1. 主键:bigint、无符号型、自增。
      1. 数据量 18,446,744,073,709,551,616。一天用 100亿,能用到地球爆炸
    1. 状态类字段:用tinyint,无符号型,最大标识256种状态
    2. 字符串字段:
      1. 约束好大小,varchar(100)与varchar(255)在磁盘存储是一样的。但是查询加载到内存中是不一样的。所以依然推荐约束大小,能用小不用大,提升性能
      2. 参与的检索字段用char的性能高于用varchar
      3. 超大文本,建议单独表存储。选用text类型
    1. 业务上非null字段,数据库也非null约束,节省空间,提升性能
    2. 日期字段区别:datetime、time、timestamp
  4. 不做外键:由业务代码保证数据一致性。提升性能

  5. 合理选择冗余存储:经常联表查询的某几个字段,可以进行冗余存储,避免联表,提高性能

  6. 最好不要用触发器这些隐藏机制;适当使用存储过程

....

4. RBAC权限模型

image-20240612220342384
认证和授权

  • 认证:你是谁?

    • 高铁:身份证刷进站;
    • 认证通过,你能使用系统的后续功能。
  • 授权:你能干什么?

    • 你只能去二等座哪个座?

认证

  • 登录:账号/密码,刷脸,指纹...
  • 系统:权限令牌; jwt、uuid-token、自定义算法....
  • 识别:后端能识别这个令牌是合法的还是非法的; 令牌:防伪签名(设备id、算法签名)。
  • token: 项目中会讲; sa-token;

授权

  • 张三:管理员,能做很多事。

  • 每做一件事,鉴权;有则继续,无则打回。

    • 删除订单:
    • 创建商品:
  • 过滤器、拦截器机制;

    • 去数据库查询张三能做哪些事?当前要做的事是否是在能做的事列表(法有授权才可为

用户: 账号、密码、邮箱、头像

权限:权限名、权限标识

License:  CC BY 4.0