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. Python 操作集合

    Python 操作集合 集合,set,主要用于数据的关系测试和去重处理,和列表类似,可以存储数据,列表中可以存储重复的数据,但是如果转化为集合之后,数据就会进行去重,然后保留唯一值:关系测试就是求多个 ...

  2. 应用调试(一)strace

    目录 编译 使用 原理 深入文档 title: 应用调试(一)strace date: 2019/1/15 23:35:14 toc: true --- 编译 #tar -xjf strace-4.5 ...

  3. 驱动调试(四)oops确定调用树

    目录 驱动调试(四)oops确定调用树 内核开启调用树 栈指针分析 原理 寄存器别名 基础解释 例子分析 找到PC地址的位置 栈分析 附录:原文的excel title: 驱动调试(四)oops确定调 ...

  4. openstack项目【day23】:glance基础

    本节内容 一 什么是glance 二 为何要有glance 三 glance的功能 四 glance的两个版本 五 镜像的数据存放 六 镜像的访问权限 七 镜像及任务的各种状态 八 glance包含的 ...

  5. Windows下配置eclipse写WordCount

    1 下载插件 hadoop-eclipse-plugin-2.7.2.jar github上下载源码后需要自己编译.这里使用已经编译好的插件即可 2 配置插件 把插件放到..\eclipse\plug ...

  6. 2.7 if应用:猜拳游戏

    应用:猜拳游戏 <1>运行效果: <2>参考代码: import random player = input('请输入:剪刀(0) 石头(1) 布(2):') player = ...

  7. Thread和Runnable的区别

    Runnable源码 Thread源码 结论 Thread实现了Runnable接口的类,使得run支持多线程. 因类的单一继承原则,推荐使用Runnable接口实现多线程

  8. YYS FZU - 2278 (期望)JAVA

    题目链接: G - YYS FZU - 2278 题目大意: 我们现在想要收集到n个卡片,现在已知抽到每种卡片的概率为1/n,现在每隔(n-1)!天就可以进行一次抽奖,问收集齐所有卡片的期望天数. 具 ...

  9. 移动端调用电话、短信、唤起QQ和使用百度地图

    H5能很方便地实现这些功能,都是一句代码搞定 调用电话 <a href="tel:12345678"> 短信 <a href='sms:12345678'> ...

  10. ubuntu16.04降级内核版本至3.13.0-85

    1.前言 采用ubuntu16.04在编译实验课程的实例代码simplefs 时,发现编译时报如下错误: 因此需要将ubuntu16.04的内核版本降级为 3.13.0-85-generic 2.修改 ...