业务模型设计

news2024/11/23 21:38:40

业务模型设计

  • 业务模型设计
    • 统一语言、术语
      • 统一单词
    • 业务数据表模型规范
    • 数据库范式
    • 几个经验
    • 业务模型
    • 索引
    • 主键: 自增id、雪花id、和uuid 差别
    • 创建表
    • 字符集设置
    • myisam 和 innodb 区别

业务模型设计

统一语言、术语

定义:需求分析的过程(系统目标、范围、具体功能达成一致的过程)中提炼领域知识的产出物

意义:在统一语言的前提下可以寻找正确的领域概念,为建立领域模型提供重要参考消除领域专家与团队、以及团队成员之间沟通的分歧与误解

统一语言的体现:

  • 1 统一的领域术语(描述什么的)

  • 2 领域行为描述(干什么的)
    化解精通业务的领域专家善于技术的开发人员 对业务术语理解之间的鸿沟。

统一单词

多团队协作时 业务术语的描述统一

举个栗子:

业务数据表模型规范

表名称、字段名称小写,语义化的表述 。见名知意
使用统一词汇表、统一字典表

自增主键:id
创建和更新: (必须非空等等约束)
create_user
update_time on update current_timestamp not null
create_time current_timestamp
update_time

数据库范式

  • 1.第一范式(1NF):列不可再分
    每一列属性都是不可再分的属性值,确保每一列的原子性
    举例:地址、shiro框架,json字符串 :反例
  • 2.第二范式(2NF)属性完全依赖于主键
    必须要有主键
  • 3.第三范式(3NF)属性不依赖于其它非主属性 属性直接依赖于主键
    表与表之间的依赖关系 完全依托于主键字段 没有其他多余字段

范式大都是为了消除冗余而提出的,即尽可能的减少存储成本。
完全消除冗余可以做到,但是不一定是好的数据库设计

几个经验

  • 一:字段的原子性

解释:保证每列的原子性,不可分解,意思表达要清楚,不能含糊,高度概括字段的含义,能用一个字段表达清楚的绝不使用第二个字段,必须要使用两个字段表达清楚的绝不能使用一个字段

  • 二:主键设计

解释:主键不要与业务逻辑有所关联,最好是毫无意义的一串独立不重复的数字,常见的比如UUID或者将主键设置为Auto_increment;

  • 三:状态值

解释:最好用独立的数字或者单个字母表示,不用使用汉字或长字符的英文

  • 四:字段长度

解释:建表的时候,字段长度尽量要比实际业务的字段大3-5个字段左右(考虑到合理性和伸缩性),最好是2的n次方幂值。

  • 五:关于外键

解释:尽量不要建立外键,保证每个表的独立性。如果非得保持一定的关系,最好是通过id进行关联

  • 六:动静分离

解释:最好做好静态表和动态表的分离。这里解释一下静态表和动态表的含义,静态表:存储着一些固定不变的资源,比如城市/地区名/国家(静态表一定要使用缓存)。动态表:一些频繁修改的表

  • 七:关于code值

解释:使用数字码或者字母去代替实际的名字。存储时

  • 八:关于Null值

解释:尽量不要有null值,可以在建表的时候设置一个默认值!比如设置为:0,-1等
null值无法单独建立索引

  • 九:关于引擎的选择

解释:innodb与myisam。
myisam的实际查询速度要比innodb快,因为它不扫面全表,但是myisam不支持事务,没办法保证数据的一致性。

  • 十:资源存储

解释:数据库不存储任何资源文件,使用文件存储系统。
比如照片/视频/网站等,可以用文件路径/外链用来代替,这样可以在程序中通过路径,链接等来进行索引

  • 十一:与主键相关

解释:根据数据库设计三大范式,尽量保证列数据和主键直接相关而不是间接相关

  • 十二:关系映射

解释:多对一或者一对多的关系,关联一张表最好通过id去建立关系
多对多关系,使用中间表建立关系
而不是去做重复数据,这样做最大的好处就是中间的关系表比较清楚明白。

  • 十五:删除数据
    设置删除状态!

业务模型

照着原型图或者高保真ui图,设计表模型
梳理,模型之间一对一和一对多,多对多之间的关系
在这里插入图片描述

Alt

索引

  • 普通索引(NORMAL)
    仅加速查询,无限制
    关键字: INDEX

  • 唯一索引(UNIQUE)
    加速查询 + 列值唯一(可以有null),如果是组合索引,则列值的组合必须唯一
    关键字:UNIQUE

  • 主键索引 (PRIMARY KEY)
    加速查询 + 列值唯一(不可以有null)+ 表中只允许有一个主键索引, 是一种特殊的唯一索引
    关键字:PRIMARY KEY

  • 组合索引
    多列值组成一个索引,专门用于组合搜索,其效率大于索引合并(索引合并:使用多个单列索引组合搜索)
    只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合
    没有关键字,多个字段使用普通、唯一、主键索引就是组合索引
    创建联合索引时,应该仔细考虑下列的顺序,区分度大的放在前面

  • 全文索引
    关键字:FULLTEXT

主键: 自增id、雪花id、和uuid 差别

mysql 官方推荐连续自增的主键 id。考虑自增上界
https://blog.csdn.net
在这里插入图片描述

创建表

CREATE TABLE
[IF NOT EXISTS] tb_name -- 不存在才创建,存在就跳过
(column_name1 data_type1 -- 列名和类型必选
  [ PRIMARY KEY -- 可选的约束,主键
   | FOREIGN KEY -- 外键,引用其他表的键值
   | AUTO_INCREMENT -- 自增ID
   | COMMENT comment -- 列注释(评论)
   | DEFAULT default_value -- 默认值
   | UNIQUE -- 唯一性约束,不允许两条记录该列值相同
   | NOT NULL -- 该列非空
  ], ...
) [CHARACTER SET charset] -- 字符集编码
[COLLATE collate_value] -- 列排序和比较时的规则(是否区分大小写等)

复制表结构创建表: CREATE TABLE tb_name LIKE tb_name_old
查询结果创建表: CREATE TABLE tb_name AS SELECT * FROM tb_name_old WHERE options

字符集设置

show charset;
show variables like 'character%';
show collation like 'utf8mb4%';

https://zhuanlan.zhihu.com/p/471370773
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

myisam 和 innodb 区别

一般选择innodb

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/91497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

001、【C语言编程题目】猴子吃桃问题

001、【题目】猴子吃桃问题 猴子吃桃问题:猴子第一天吃了若干个桃子,当即吃了一半,还不解馋,又多吃了一个; 第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天…

艾美捷针对性检测—游离维多珠单抗ADA水平检测试剂盒

艾美捷游离维多珠单抗ADA水平检测试剂盒可靠地测定游离ADA针对维多利单抗(如ENTYVIO)). 风湿因子的联合测定或排除不规则抗体。连同确定维多利单抗的活性物质浓度由IDK监测仪指示 维多利单抗免费ADA ELISA,主治医师有可能陪同治疗并在早期阶段…

用Python作一条已知曲线的等距曲线

参考资料: 该如何作一条已知曲线的等距曲线? - 知乎 等距线_百度百科 目录 1.等距线 2.数学推导 3.示例 4.代码与结果 1.等距线 等距线(equidistant line)亦称平行曲线,一种平面曲线,即由一已知曲线…

准备Plan B 如何设计兜底方案

对于很多秒杀系统而言,在诸如双十一这样的大流量的迅猛冲击下,都曾经或多或少发生过宕机的情况。当一个系统面临的大流量时,它其实很难单靠自身调整来恢复状态,你必须等待流量自然下降或者认人为地把流量切走才行,这无…

Android OpenGL ES 学习(九) – 坐标系统和实现3D效果

OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学习(三) – 绘制平面图形 Android OpenGL ES 学习(四) – 正交投影 Android OpenGL ES 学习(五) – 渐变色 Android OpenGL ES 学习(六) – 使用…

高通Ride软件开发包使用指南(7)

高通Ride软件开发包使用指南(7)6.5 构建 x86 Ubuntu SDK6.6端到端可视化6.7 x86 Ubuntu上的功能验证6.7.1简单比特率验证6.7.2在x86笔记本上用 8xCams HEVC格式 录制 FPS6.8记录仪6.5 构建 x86 Ubuntu SDK 构建 x86 ubuntu ~/src/qride/stack-sdk$ ./ex…

十个精妙绝伦的SQL语句,说尽SQL精华

目录引子十大SQL1. 统计班级总分前十名2. 删除重复记录, 且保留一条3. 最大连续登陆天数的问题4. 计算除去部门最高工资,和最低工资的平均工资5. 计算占比和同比增长6. 算成绩7.算昨天每个城市top 10消费金额的用户,输出city_id,city_name,uid, 消费总金…

C语言刷题(3)

🐒博客名:平凡的小苏 📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情 目录 计算体重指数 计算三角形周长和面积 KiKi和酸奶 网购 变种水仙花 计算体重指数 描述 问题:计算BMI指数&#xff0…

安全可信 | 强墙出击!天翼云Web应用防火墙(原生版)硬核亮相!

12月9日,由中国信息通信研究院主办的“墙墙联合——云上防火墙技术沙龙”在线上顺利举行,天翼云科技有限公司研发专家吴雷分享了新标准、新需求下云Web应用防火墙(云WAF)的发展方向,并介绍了天翼云Web应用防火墙&#…

如何从 OVF 或 OVA 文件中部署虚拟机

从 OVF 或 OVA 文件中部署虚拟机 使用新建虚拟机向导从 OV F和 VMDK 文件或 OVA 文件部署虚拟机。由于 Web 浏览器的限制,OVA 部署仅限于1GB以下的文件。要部署大于1GB的 OVA 文件,请使用 tar 提取 OVA 文件并分别提供OVF和VMDK文件。 一、右键单击导航器中的‘‘虚拟机“,…

Android:远程调试WebView

目录 前言 配置WebView 手机设置 远程调试 前言 APP中使用WebView展示网页的结果可能不太理想,那么我们想调试的话就没有在浏览器当中调试方便,不过谷歌浏览器给我们提供了能远程调试的方案。 官方文档:https://developer.chrome.com…

Blazor也可以用MarkDown!Vditor-Blazor基础使用教程以及部分源码解析!Ant-Designer-Blazor

前言 Ant-Designer-Blazor组件库是一款非常好用的Blazor的UI框架库,使用很少的精力就可以搭建出一个漂亮的UI界面了。 但是Ant-Designer-Blazor中尚缺少对MarkDown组件的支持,所以只能下载Nuget包里面的一个Vditor(也是Ant-Designer的&#…

设计师常用网站,建议收藏

这几个设计师常用网站,你不知道就落后了 设计党赶紧收藏!1、菜鸟图库 https://www.sucai999.com/?vNTYwNDUx 免费设计素材。 站内平面海报、UI设计、电商淘宝、免抠、高清图片、样机模板等素材非常齐全。还有在线抠图、CDR版本转换功能,能有…

坦克大战③

1.防止敌人坦克重叠运动 八种情况 这辆敌方坦克和任何其它敌方坦克都不发生碰撞时且不超边界时才可以移动 2.记录玩家成绩 绘制版面信息 paint()方法中如果没有super.paint(g),那么绘制的敌方坦克数会出现重叠情况 调用方法 在Recorder类中定义一个方法…

Java 性能诊断工具简介-EJ Technologies JProfiler 12.0.5 中文激活版

目录 JProfiler 这篇文章讲解的比较详细: 可以辅助命令,应用jar的启动命令: 同时在开发工具里面添加一个JProfiler插件 JProfiler 这篇文章讲解的比较详细: JVM性能分析工具 Jprofiler - 百里浅暮 - 博客园 我在这里记录下。…

MATLB|电动汽车充放电的最优调度

目录 一、概述 二、电动汽车 2.1 电动汽车的类型 2.2电动汽车行程开始时间 2.3 电动汽车行驶里程 三、Matlab实现 3.1 代码前的准备 3.2 运行结果 四、往期回顾 五、Matlab代码实现 一、概述 电动汽车能够良好发展离不开精确的电动汽车充电负荷预测,目前,大多数充电负…

2022全年度烘干机十大热门品牌销量榜单

在“宅经济”时代,人们对大家电的需求持续高速增长。在当前的大环境下,人们的健康意识在不断提高,拥有除菌防菌功能的烘干机也更受欢迎。因此,烘干机作为快速进入普及阶段的家电新品,市场增长空间非常大。 根据鲸参谋数…

RCE绕过靶场练习

目录 CTF-01 CTF-02 CTF-03 CTF-04 CTF-05 CTF-01 测试回显 Array ([0] > PING 127.0.0.1 (127.0.0.1): 56 data bytes[1] > 64 bytes from 127.0.0.1: seq0 ttl42 time0.028 ms[2] > 64 bytes from 127.0.0.1: seq1 ttl42 time0.059 ms[3] > 64 bytes from …

Javascript 面向对象的缺陷,父类能调用被子类重写后的方法

问题背景 前些天做项目练手时,遇到一个需要写类的场景,各个类之间的交互我打算用事件的方式进行,就自然地在父类继承了EventEmitter类。然后在父类对一个具体事件注册了一个默认监听,子类通过注册自己专有的监听细化逻辑。代码逻…

win7、win10关闭驱动签名,进入驱动测试模式,以及常见初级问题的解决

win7关闭驱动签名,进入驱动测试模式win7、win10关闭驱动签名、进入驱动测试模式DebugView工具运行提示"Dbgv.sys: 拒绝访问"驱动项目配置属性常用设置驱动中KdPrint打印UNICODE_STRING字符串常用方法没使用的变量在编译时报警告:未引用的形参错…