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. MySQL的SQL_Mode修改小计

    问题复现 今天突然发现MySQL服务器升级之后sql_mode变成宽松摸索了,危害如下: 临时解决 set global sql_mode='strict_trans_tables'(阿里服务器默认是 ...

  2. 模型评估【PR|ROC|AUC】

    这里主要讲的是对分类模型的评估. 1.准确率(Accuracy) 准确率的定义是:[分类正确的样本] / [总样本个数],其中分类正确的样本是不分正负样本的 优点:简单粗暴 缺点:当正负样本分布不均衡 ...

  3. 分布式监控系统开发【day37】:服务端生成配置数据(四)

    一.目录结构 二.引子与代码 1.客户端获取服务列表接口 1.解决了什么问题 客户端要给我获取服务列表的的时候,他肯定要告诉他是谁?他怎么告诉我,客户端必须有一个id号 Saltsack你装一个客户端 ...

  4. SpringCloud笔记三:Eureka服务注册与发现

    目录 什么是Eureka? Eureka注册的三大步 第一步,引用Maven 第二步,配置yml 第三步,开启Eureka注解 新建Eureka子项目 把provider子项目变成服务端 Eureka ...

  5. MS SQL Server 数据库连接字符串详解

    MS SQL Server 数据库连接字符串详解 原地址:http://blog.csdn.net/jhhja/article/details/6096565 问题 : 超时时间已到.在从池中获取连接 ...

  6. Spark SQL相关总结

    1.spark 数据透视图: pivot(pivot_col, values=None) Pivots a column of the current [[DataFrame]] and perfor ...

  7. 用 Mathematica 获取图片的 RGB 三基色

    ColorConvert[*, "RGB"] // InputForm 其中 * 表示你把你的图片拖入 Mathematica 中.

  8. [数学笔记Mathematical Notes]2-一个带对数的积分不等式

    定理. $$\bex \int_0^1\frac{\ln^2x}{x^x}\rd x<2\int_0^1 \frac{\rd x}{x^x}. \eex$$ 证明: 由分部积分及 Fubini ...

  9. 调用腾讯、百度翻译API,实现游戏机翻通用程序

    最近玩了款steam独立游戏,没中文,只能自己汉化了,用腾讯跟百度的API实现了一个通用的机翻程序(只需要导入JSON文本), 同样,比较懒,还没写,先占坑

  10. sql 发送邮件

    一.启用Database Mail XPs功能. 查看Database Mail XPs功能是否打开,从返回结果来看,value为0说明没有打开,注意SQL Mail XPs是SQL Server早期 ...