需求引导设计 切莫教条主义

对于懂得软件工程的人来说,标题就是一句废话,没有需求分析,哪来的设计?软件设计和实现中,开发者往往会在不知不觉中忽略用户的需求,站在开发者的角度,按照自己的意愿去设计软件。同样在为系统设计数据库的时候,也存在类似的现象,也许你设计的数据库满足三范式的原则,而且非常灵活,但是用户方的负责人一看就知道这种严格按照理论设计的数据库是不能用的,会给带来好多问题,尤其是性能方面的。

那么应该怎样去考虑数据库的设计呢?个人理解的是,应该以理论知识为基础,以需求为导向进行数据库的设计,不能只是将系统的实体抽象出来,然后按照三范式的理论进行设计,而完全不考虑系统在实际使用中面临的问题,换句话说就是站在使用者的角度去看待数据库的设计。最近在设计机房收费系统的数据库,比较迷茫,所以就广泛的阅读博客,好多人都有自己的理解,在看到高玮师哥的实习感悟,顿时有点感觉了。

机房收费系统的数据库如何设计暂时不谈,先来看一个例子:最近学校正在搞“校园一卡通”的项目,期望将学生使用的饭卡和银行卡绑定,为学生充值提供便利,这样你就不用去ATM机排半天队,取出现金,完了再跑到食堂排半天队才能充上钱,直接用手机银行和网上银行就能搞定。在办理一卡通之前,需要核对个人信息,我核对的时候将屏幕的信息用手机拍了下来,方便以后查阅,我们就以一卡通的信息为例,谈谈数据库的设计。

一卡通的信息主要有这么几项:卡号、姓名、学号、性别、民族、余额、国籍、手机号、部门(专业班级等)、身份证号、银行卡号,如果让你为这个系统设计数据,你会怎么考虑?

以我个人的理解,可以抽象出这么几个实体:学生、饭卡、身份证和银行卡,然后我们将上述信息按照第一范式的原则给他们归类:

学生:学号、姓名、部门、手机号

饭卡:卡号、姓名、余额

身份证:身份证号、姓名、性别、民族、国籍

银行卡:卡号、姓名、余额

这是对一卡通屏幕显示的信息的一个分析,去稍微还原一下数据库的结构,可能只是部分的信息,但是不影响我们说明问题,一卡通的后台数据库我也接触不到,所以只能这么琢磨了。

在核对信息的时候,我们只需将饭卡贴在自助终端的射频区域即可显示全部信息,因此饭卡号是一个主键,我的个人信息缺了手机号,在添加的时候只需提供身份证即可,将我的个人信息全部找出,说明身份证号也是一个主键。

如果以上面的数据库表的结构,如何通过我的身份证号查找和修改我的手机号呢?你也许会想到使用数据库的联合查询,即join关键字,让学生表的姓名等于身份证的姓名,即可查出我的手机号。但是重名问题怎么解决?多个人的姓名一模一样,怎么精确定位?

两种办法,一种是在身份证的表中添加学号的字段,因为学号是唯一的;另一种是将学生表和身份证表合并,身份证号作为学生信息的一部分,合并两个表中的的“同类项”(即重复信息)。那种办法好呢,更贴近需求呢?

我个人觉得第二种号,两点原因,第一,身份证的信息里添加一个学号,总觉得别扭,不符合自然认知;第二,合并表之后,就不需要联合查询,在海量数据查询中的效率会快很多,身份证号作为学生信息的一部分,比较合适,况且可以消灭数据冗余。

现在你想想为什么我们之前用的机房收费系统的学生信息会和卡的信息在一张表中了吧,也许有他们自己的道理,总之在设计数据库的时候,应该让需求来引导设计,不要只是单纯的去考虑什么范式和原则等这些理论知识,应该以实际应用为出发点。在实际工作中,数据库的设计目标不是最正确,而是最优化。

需求引导设计 切莫教条主义

时间: 2024-11-13 11:16:59

需求引导设计 切莫教条主义的相关文章

移动应用引导设计赏析

当今移动应用引导流程的设计可谓是环肥燕瘦.有些就如同创建账户或是登录页面一样简单,而更多的则是包含了应用引导或是操作指南之类的内容.无论你打算如何设计引导流程,看看别人是怎么做的总是有价值的,并且也能从中获得一些启发. 接下来我将给大家介绍4个不同应用的引导设计——Days.Duolingo.Acorns和Authenpic. Days Days是一个倒计时应用,你可以通过它查看当前距离某一个重大事件还有多少日子.打开应用,首先映入眼帘的是一个干净简洁的欢迎页,上面有应用的Logo以及一段简短的

扫盲 HTTPS 和 SSL/TLS 协议[1]:背景知识、协议的需求、设计的难点

转自: https://program-think.blogspot.com/2014/11/https-ssl-tls-1.html 扫盲 HTTPS 和 SSL/TLS 协议[1]:背景知识.协议的需求.设计的难点 文章目录 ★相关背景知识★HTTPS 协议的需求是啥?★设计 HTTPS 协议的主要难点★结尾 ★相关背景知识 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关

需求与设计过程(1)-用例(转)

1.前言 看过太多的称得上“三无”的软件,就是无需求.无设计.无注释.严格的说来,他们的需求和设计其实还是有的,只是没有用文档记录下来而已,但是注释确实真的没有.这些软件从大到小都有,但是他们都有一个共同的特点,就是“难维护”.前几天和同事聊天,听说一个XAML的实现要重写了,用本地协议代替,然后再去考虑和XAML兼容.虽然我没有看过这个项目的代码,但是我知道这个项目基本也是“三无”.当然这个情况也是三无的重大特征之一,就是前脚走人之后,后脚是“看不懂.下不了手”,结果是还不如重写来得简单.从员

UML和模式应用5:细化阶段(7)---从需求到设计迭代进化

1.前言 迭代开发中,每次迭代都会发生从以需求或分析为主要焦点到以设计和实现为主要焦点的转变 分析和面向对象的分析重点关注学习做正确的事,理解案例重要目标,规则和约束 设计工作强调正确的做事,熟练设计解决方案满足本次迭代的需求 早期迭代在分析活动上花费较多时间,后期迭代减少分析活动,注重构建解决方案 2.尽早引发变更 早期迭代发现和变更一些需求是很正常的有帮助的: 迭代和进化式方法包容变更: 早期迭代引发变更有助于后期迭代稳定: 尽早编程.测试和演示有助于尽早引发不可避免的变更: 3.完成分析和

性能测试小总结(二) 需求、设计

二.性能测试的需求 1.1 确定性能测试点 1)用户常用功能 2)系统业务逻辑复杂.数据流转频繁的功能 3)与外部系统的接口处 2.2 确定性能指标 1.响应时间,2/5/8s 很快 还可以 很慢 ,一般小于5s 2.并发用户,目前还没有准确的公式,二八定律(在任何一组东西中,最重要的只占其中一小部分,约20%,其余80%尽管是多数,却是次要的) 3.吞吐量 三.性能测试的设计 四.性能测试的执行 五.性能测试的分析 原文地址:https://www.cnblogs.com/gdf456/p/1

Web自动化测试项目搭建(一) 需求与设计

一.项目需求 测试/生产环境更新后,自动化回归测试 项目易于维护和运行 支持多种测试策略 支持可视化测试报告 运行结果,支持多种方式通知相关人员 可定时/触发的方式运行自动化测试用例 二.设计 2.1 需要的技能 Python基础(面向对象) 熟悉Python引包机制 了解Html,Css,异步请求 熟练使用Selenium API(最好有读过源码) 熟练使用Python Uittest/Pytest 测试框架 了解PO设计模式 2.2 项目目录划分 ├── config │?? └── __i

根据需求,设计jmeter元件

需求1:有一个项目,500用户同时登录,响应时间能达到多少: 需求2:考勤打卡,最大吞吐量能达到多少(每秒最大能完成多少笔打卡业务): 需求3:银行业务,如果需要支持1分钟内完成3000笔取款操作,平均每秒能支持多少用户同时取款完成: 答1:线程组设置线程数500,循环1次,并设置集合点为500:查看聚合报告响应时间即可: 答2:通过rps定时器,设置60s,rps从1均匀的增加到1000/s,查看hps,响应时间,tps,找出tps拐点: 也可以使用自由形式到达线程组: 答3:1个线程,一次取

手机产品设计之用户引导

在手机产品的设计过程中,由于手机界面的承载能力有限,产品功能的不断膨胀,必须要在用户打开应用之后告知他某些新奇的功能,引导他完成某些主要任 务流程,让用户不至于迷失在陌生应用中不知所措.帮助用户快速掌握应用的使用方法,体验到应用的乐趣,新手引导成了一个必须考虑的设计环节. 用户引导的直接目标是帮助用户更好的使用产品,终极目标是提升用户满意度.虽然,大多数情况下,我们可以通过合理的设计,尽可能的简化功能,让用户 无需引导和帮助,就可以完成必要的任务.但是实际上,手机产品的限制和对强大功能的追求,导

爱心银行需求设计

https://www.zybuluo.com/Feather/note/354940 易助爱心银行需求设计 产品设计 易助 易助爱心银行需求设计 1.引言 1.背景 2参考资料 3.假定和约束 4.用户的特点 2.功能需求 1系统范围 2.功能需求 获取爱心币的方式 爱心币的用处 爱心银行爱心币来源 3.爱心银行系统体系结构 爱心银行模块构架: 具体板块说明等细则 4.需求分析 3.非功能需求 1.性能需求 2.安全保密性要求 3.灵活性要求 1.引言 1.背景 说明: a.待开发的模块名称: