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. 【dfs】P1433 吃奶酪

    题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入输出格式 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块 ...

  2. Ansible安装部署以及常用模块详解

    一.  Ansible 介绍Ansible是一个配置管理系统configuration management system, python 语言是运维人员必须会的语言, ansible 是一个基于py ...

  3. c语言中堆栈和静态空间

    什么是堆空间.栈空间与静态空间 堆空间:由程序员自己分配空间,如malloc需要指定分配多少个多大的字节空间,不用的时候需要自己释放 栈空间:栈空间是由系统自动分配与释放,如int,char等大小都已 ...

  4. windows下搭建vue开发环境+IIS部署

    原创]win10下搭建vue开发环境  https://www.cnblogs.com/ixxonline/p/6007885.html 特别说明:下面任何命令都是在windows的命令行工具下进行输 ...

  5. 【转载】C++ vector的用法

    http://www.cnblogs.com/Nonono-nw/p/3462183.html

  6. QGE 在齐次 Besov 空间中的准则

    在 [Zhang, Zujin. On the blow-up criterion for the quasi-geostrophic equations in homogeneous Besov s ...

  7. C# Textbox 自动换行

    方法1 使用textbox的AppendText方法 方法2 textBox.ScrollToCaret(); this.textBox.Focus();//获取焦点 this.textBox.Sel ...

  8. Mysql的跨服务器 关联查询--Federated引擎

    1.确认开启Federated引擎     查询FEDERATED功能是否开启: show ENGINES;       2.如果状态为NO则需修改my.ini文件,增加一行federated配置: ...

  9. Python 爬虫 当当网图书 scrapy

    目标站点需求分析 获取当当网每个图书名字和评论数 涉及的库 scrapy,mysql 获取解析单页源码 保存到数据库中 结果

  10. ALU底层方法及计算机整数加减乘除模拟

    ALU是计算机CPU的核心,即 算术逻辑单元(arithmetic and logic unit)ALU有几大功能,是计算机计算最基础的功能:1.算术运算:包含加法.减法等2.逻辑运算:主要是布尔运算 ...