0X01

开始做一个app的时候,要先做的是流程设计与数据库模型设计。

但做的模型设计往往是设置字段满足当前的需求,缺乏足够的经验,即使为以后的功能预留出位置,也无法考虑周全。

比如,刚开始做用户表,关于删除用户的功能,一开始预想的是直接删除用户。等到所有功能做完了,这一个版本结束了,在下一个版本迭代中,想要给数据库添加一个删除status字段,删除的时候改status=0,用于标记删除,代替直接删除用户,以记录历史用户数据。

但是看了一遍代码,如果加多一个删除的status字段,需要考虑这个库的各个使用的地方,是不是需要在增删改查的时候加入status的判断,会特别头疼。

0X02

最近的一个需求是我需要做一个数据库数据删除的功能,但是删除完又想有数据回滚、删除数据记录的功能;最好的应该是有一个删除状态,但是这个项目的所有功能逻辑其实我也并不是特别清楚,如果加一个状态,需要先弄清80个使用该表的地方,再进行判断是否需要改动,工作量实在是复杂。

反而是在删除的时候同时插入另一个复制的表,很快就能做完回滚的功能。

前期的模型设计,后期要改动,成本实在是太大了。所以应该尽量在项目开始初期就做好数据库模型的设计,还有功能的预留位置,就算现在版本比较简单,也需要考虑以后迭代更新的时候可能会添加这个功能。尽量设计好一个足够健壮健全的框架,以免迭代的时候还要回头改动框架,那样成本就太大了。这也是与经验有关,但不要以经验不足为借口就不做了。经验不足,调研辅助,思考为主。

0X03

另一个点是,在加状态来判断几种状态之前,先考虑一下,能不能从数据库中的其他字段中判断出状态的不同。

比如说,原本我这个表中只存广东人,所以所有模型设计都是依靠广东人的。之后需要加一个需求,东北人的数据也要接入这个表中。

其实加一个来源字段是最科学的方法。但是如果可以从其他字段,比如户籍、户口、住址、口音这些地方来判断来源,那么更容易做的是用其他字段来判断,加一个来源字段实在是成本太高了,而且相比现有字段判断,显得更加鸡肋。

—————————做完了状态判断的流程后,发现有一个字段可以很简单的判断,于是把之前的改动都删除掉,再两三句代码改完。当改完的时候有点想哭,记下来,长点脑子。

项目之初的模型设计与status状态字段的更多相关文章

  1. springboot+支付宝完成秒杀项目的初体验

    springboot+支付宝完成秒杀项目的初体验 思考的问题: 首先是秒杀的商品查询,考虑到是热点数据,所以写一个接口读取当日批次的秒杀商品到redis中(那么接下来对商品的操作都放入redis中). ...

  2. XMLHttpRequest.status状态码

    XMLHttpRequest.status状态码1xx-信息提示 这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个1xx响应. 100-继续. 101-切换协议. 2xx-成 ...

  3. 常见的XMLHttpRequest.status状态码

    XMLHttpRequest.status状态码 1xx-信息提示 这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个1xx响应. 100-继续. 101-切换协议. 2xx- ...

  4. nginx启用status状态页

    nginx和php-fpm一样都内建了一个状态页,通过查看状态页信息可以连接到nginx服务负载情况,还可以利用状态页信息配zabbix监控,这里先介绍nginx的status状态页的使用. stau ...

  5. Http协议Status状态代码

    Http协议:Http协议(超文本传输协议)是一个基于请求与响应模式的.无状态的.应用层的协议,常基于TCP的连接方式,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用http请求有三部分 ...

  6. MySQL - 表中某个状态字段的状态表示区分最好用数字,如status - [9999:失败,1111:成功]

    表中某个状态字段的状态表示区分最好用数字,如status - [9999:失败,1111:成功]

  7. 集群服务器状态命令------rs.status()各个字段的含义

    可根据rs.status() 查询集群服务器状态.字段解释: self 这个信息出现在执行rs.status()函数的成员信息中 stateStr用户描述服务器状态的字符串.有SECONDARY,PR ...

  8. Ajax status状态详解

    readyState属性包括五种可能的取值: 0: (未初始化)send方法还没有被调用1: (加载中)已调用了send方法,请求还在处理2: (已加载)send方法已完成,整个应答已接收3: (交互 ...

  9. Ajax Status(状态码) & readyState()

    Ajax Status & readyState readyState(状态值) 是指运行AJAX所经历过的几种状态,论访问是否成功都将响应的步骤,可以理解成为AJAX运行步骤,使用" ...

随机推荐

  1. MT【318】分式不等式双代换

    已知$a,b>0$且$\dfrac{1}{a}+\dfrac{1}{b}=\dfrac{2}{3}$,求$\dfrac{1}{a-1}+\dfrac{4}{b-1}$的最小值. 解:令$m=\d ...

  2. Day039--HTML

    HTML小马哥博客 HTML CSS + DIV实现整体布局 1. HTML 超文本标记语言 对换行不敏感 空白折叠现象 标签要严格密封 新建HTML文件,输入 html:5,按tab键后,自动生成的 ...

  3. (二分查找 拓展) leetcode278. First Bad Version

    You are a product manager and currently leading a team to develop a new product. Unfortunately, the ...

  4. Hadoop启动脚本分析

    Hadoop启动脚本分析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 能看到这篇博客的你估计对Hadoop已经有一个系统的了解了,最起码各种搭建方式你应该是会的,不会也没有关系, ...

  5. GIT-常规操作

    本地安装git, 安装文件: Git客户端: 可百度搜索:GIT64位或GIT32位等关键字找到相应的版本进行下载. 本地地址:D:\20-git\Git-2.20.1-64-bit.exe 也可百度 ...

  6. Sobel 边缘检测算子

    转自:http://blog.csdn.net/xiaqunfeng123/article/details/17302003 Sobel 算子是一个离散微分算子 (discrete different ...

  7. MongoDB实战性能优化

    1. 性能优化分类 mongodb性能优化分为软件层面和操作系统层面. 软件层面,一般通过修改mongodb软件配置参数来达到,这个需要非常熟悉mongodb里面的各种配置参数: 而操作系统层面,相对 ...

  8. java实现文件的断点续传

    java实现文件的断点续传: 依赖: <!--文件上传--> <dependency> <groupId>commons-fileupload</groupI ...

  9. JGUI源码:Accordion兼容IE8实现(3)

    本来不考虑IE8,但是还是有部分客户用的XP,有不代表没有,尽量做一下兼容处理1.before,after,要使用:不能使用:: 2.阻止冒泡 function stopPropagation(e) ...

  10. SSH框架之hibernate《四》

    hibernate第四天     一.JPA相关概念         1.1JPA概述             全称是:Java Persistence API.是sun公司推出的一套基于ORM的规范 ...