项目之初的模型设计与status状态字段
0X01
开始做一个app的时候,要先做的是流程设计与数据库模型设计。
但做的模型设计往往是设置字段满足当前的需求,缺乏足够的经验,即使为以后的功能预留出位置,也无法考虑周全。
比如,刚开始做用户表,关于删除用户的功能,一开始预想的是直接删除用户。等到所有功能做完了,这一个版本结束了,在下一个版本迭代中,想要给数据库添加一个删除status字段,删除的时候改status=0,用于标记删除,代替直接删除用户,以记录历史用户数据。
但是看了一遍代码,如果加多一个删除的status字段,需要考虑这个库的各个使用的地方,是不是需要在增删改查的时候加入status的判断,会特别头疼。
0X02
最近的一个需求是我需要做一个数据库数据删除的功能,但是删除完又想有数据回滚、删除数据记录的功能;最好的应该是有一个删除状态,但是这个项目的所有功能逻辑其实我也并不是特别清楚,如果加一个状态,需要先弄清80个使用该表的地方,再进行判断是否需要改动,工作量实在是复杂。
反而是在删除的时候同时插入另一个复制的表,很快就能做完回滚的功能。
前期的模型设计,后期要改动,成本实在是太大了。所以应该尽量在项目开始初期就做好数据库模型的设计,还有功能的预留位置,就算现在版本比较简单,也需要考虑以后迭代更新的时候可能会添加这个功能。尽量设计好一个足够健壮健全的框架,以免迭代的时候还要回头改动框架,那样成本就太大了。这也是与经验有关,但不要以经验不足为借口就不做了。经验不足,调研辅助,思考为主。
0X03
另一个点是,在加状态来判断几种状态之前,先考虑一下,能不能从数据库中的其他字段中判断出状态的不同。
比如说,原本我这个表中只存广东人,所以所有模型设计都是依靠广东人的。之后需要加一个需求,东北人的数据也要接入这个表中。
其实加一个来源字段是最科学的方法。但是如果可以从其他字段,比如户籍、户口、住址、口音这些地方来判断来源,那么更容易做的是用其他字段来判断,加一个来源字段实在是成本太高了,而且相比现有字段判断,显得更加鸡肋。
—————————做完了状态判断的流程后,发现有一个字段可以很简单的判断,于是把之前的改动都删除掉,再两三句代码改完。当改完的时候有点想哭,记下来,长点脑子。
项目之初的模型设计与status状态字段的更多相关文章
- springboot+支付宝完成秒杀项目的初体验
springboot+支付宝完成秒杀项目的初体验 思考的问题: 首先是秒杀的商品查询,考虑到是热点数据,所以写一个接口读取当日批次的秒杀商品到redis中(那么接下来对商品的操作都放入redis中). ...
- XMLHttpRequest.status状态码
XMLHttpRequest.status状态码1xx-信息提示 这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个1xx响应. 100-继续. 101-切换协议. 2xx-成 ...
- 常见的XMLHttpRequest.status状态码
XMLHttpRequest.status状态码 1xx-信息提示 这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个1xx响应. 100-继续. 101-切换协议. 2xx- ...
- nginx启用status状态页
nginx和php-fpm一样都内建了一个状态页,通过查看状态页信息可以连接到nginx服务负载情况,还可以利用状态页信息配zabbix监控,这里先介绍nginx的status状态页的使用. stau ...
- Http协议Status状态代码
Http协议:Http协议(超文本传输协议)是一个基于请求与响应模式的.无状态的.应用层的协议,常基于TCP的连接方式,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用http请求有三部分 ...
- MySQL - 表中某个状态字段的状态表示区分最好用数字,如status - [9999:失败,1111:成功]
表中某个状态字段的状态表示区分最好用数字,如status - [9999:失败,1111:成功]
- 集群服务器状态命令------rs.status()各个字段的含义
可根据rs.status() 查询集群服务器状态.字段解释: self 这个信息出现在执行rs.status()函数的成员信息中 stateStr用户描述服务器状态的字符串.有SECONDARY,PR ...
- Ajax status状态详解
readyState属性包括五种可能的取值: 0: (未初始化)send方法还没有被调用1: (加载中)已调用了send方法,请求还在处理2: (已加载)send方法已完成,整个应答已接收3: (交互 ...
- Ajax Status(状态码) & readyState()
Ajax Status & readyState readyState(状态值) 是指运行AJAX所经历过的几种状态,论访问是否成功都将响应的步骤,可以理解成为AJAX运行步骤,使用" ...
随机推荐
- 清北学堂Day2
算数基本定理: 1.整数及其相关 2.唯一分解定理 对于任意的大于1的正整数N,N一定能够分解成有限个质数的乘积,即 其中P1<P2<...<Pk,a1,a2,...,ak>= ...
- LVM备份(3)- pg_dumpall
- vbox安装增强功能,实现宿主机文件夹共享并浏览器访问
虚拟机版本:6.0.4 r128413 (Qt5.6.2) linux:centos7/6 点击菜单栏中的设备->安装增强功能,再reboot 获取内核版本号 uname -r 查看yum的内核 ...
- CMDB服务器管理系统【s5day90】:获取今日未采集主机列表
1.目录结构 1.服务器端 2.客户端 2.具体代码如下 1.数据库增加两个字段 class Server(models.Model): """ 服务器信息 " ...
- EF CodeFirst系列(7)---FluentApi配置存储过程
FluentApi配置存储过程 1.EF自动生成存储过程 EF6的CodeFirst开发模式支持给实体的CUD操作配置存储过程,当我们执行SaveChanges()方法时EF不在生成INSERT,UP ...
- 类型和原生函数及类型转换(三:终结js类型转换)
Number() parseInt() parseFloat() Boolean() String() toString() 一.显式类型转换 -------Number()函数把对象的值转换为数字. ...
- 第三节:ThreadPool的线程开启、线程等待、线程池的设置、定时功能
一. ThreadPool简介 ThreadPool简介:ThreadPool是一个线程池,当你需要开启n个线程时候,只需把这个指令抛给线程池,它将自动分配线程进行处理,它诞生于.Net 2.0时代. ...
- tex 进度条
\documentclass{beamer} \usepackage{tikz} \usetikzlibrary{calc} \definecolor{pbblue}{HTML}{0A75A8}% f ...
- 部署自己的服务器ubuntu
一直都是在公司的服务器上工作,想搞点自己的idea比较不方便,所以近期租了要给自己的阿里云服务器. 以下为必要的软件的安装流程: jdk+jre: 1.去官网下载 jdk-linux版本: 2.解压压 ...
- 非极大值抑制(NMS)
转自:https://www.cnblogs.com/makefile/p/nms.html 概述 非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的 ...