从事IT业10年了,从一个门外汉变成一个“老菜鸟”,见过了一些号称几千万的软件项目,只觉得其中有些软件设计的技术含量都是学生毕业设计级的,不由得想起以前老师在历史课上讲“洋务运动”无法挽救清朝这一说法。永远是好的体制带来好的管理,好的管理带来好的技术,反过来,好的技术不能带来好的管理,更不可能给企业带来起死回生的效果。
好了,扯远了,不讲这些深刻的大道理,只说说ERP软件设计中,关于表设计的一些感受。
最初接触表结构的设计,是所谓的“三范式”的结构。对于像我这样非科班出身的人来说,很多知识都是出了校门再学习。所谓“三范式”,即原子性(字段不可再分)、唯一性(非主键字段依赖全部主键)、无传递依赖(在第二范式的基础上进一步约束)。在我看来这三范式可以看成2个,列不可分没什么好说的,后面2个范式说的都是一个意思,即一行记录的关键字决定了这一行数据的唯一性,但你要记得该拆成2个表时就要拆成2个表,不要将很多业务都放到一个表,造成很多数据冗余以及数据操作异常。
但讲三范式的书自己都说要是系统都按这个模式来设计那系统就死定了,其最大的一个原因是二、三范式消除数据冗余带来了很多问题。如果没有数据冗余,那么你在实现业务查询的时候就要写很多的表连接语句(不用表连接行不行?可以,你用程序来实现死的更快),在一个业务量比较大的系统中,如果系统中全是这种表连接语句,并且连接的都是千万级的表,那你的系统就扛不住了,这个时候你的系统会出现数据库连接池满,中间件垮掉等现象。好,老板说优化,你把实时查询改成滞后查询,晚上跑批次——把连接语句的结果事先写到一张大表里去。嗯,这是一个解决之道,但你会发现你优化的速度没有问题产生的速度快,命苦的维护程序员。
这时你还可以上手段,用中间件集群的方法把各子系统拆开,要死只死一个,不要死马拖活马,大家一起死。这时你会发现其实有问题的就是那么几个系统,多半是由于表设计不合理引起的,只要你的老板肯投钱,把这个系统重新翻一遍的话还是有救活项目的希望,但此时你的老板一定是想为什么不重新立个新项目呢?反正国企有的是钱。
好,当你觉得问题都已经找到原因了,现在只是一个工作量的问题时,你会发现系统现在开始卡首页了,卡完首页每个系统都开始有问题——慢得出奇。此时十之八九是你的系统底层出问题了,我当时发现是底层授权有问题,要讲清这个问题,可以另写一文。有人可能奇怪,为什么此时授权系统开始出问题,当时系统上线验收是怎么通过的。嗯,我只能说上线时数据量不大,用户对系统使用的程度也不深,越用到后来问题越多。
其实用户授权的检查对于ERP系统来说还真是个问题,一个系统用的时间越长,它增加的页面、人员、组织机构就越来越多,使用的人也越来越多。当系统在使用高峰时,每个用户都在不停的开页面,每个页面都要对用户进行授权检查,这其中包含了页面进入权限检查和按钮使用权限检查(我看网上还有内容权限检查,这我们一般都是在程序中个性化做的,搞到软件功能中还没做过),如果此时授权表设计得不好(比如说有群组套群组,部门套部门,且没有限制层数甚至可以套成回路...我很无语),极易造成锁表,授权表一锁,整个系统就垮了。
因此,我极力推荐大家把在ERP系统中把用户表、授权表同其它的业务表分离出来,不在同一个数据库,条件允许的话,不在同一服务器。这样,即使你的业务数据库垮掉了,你的框架页面、首页还是好的,你的用户也不至于那么恼火。
并且,我总是在想,针对用户表、授权表这种写入得少,读取得多的表是不是做10个副本比较好,即你在新增人员、修改授权时一次写入10个一模一样表,而当页面做授权检查时,根据一定的策略分别去读取不同的表,这样可以减缓系统压力,保证系统的稳定性。(谁在实际项目中实现了说一声,天涯的帖子就是分服务器写的,楼主的帖子只需访问www.tianya1.cn即可,由此可见楼主的回复和看客的回复不是一张表)
但用户表、授权表这种条理比较清晰,结构比较简单的底层表我还是不赞成有数据冗余,3范式还是有它的合理性,如果老板要看综合性报表还是写批次作业。至于那种流程比较长,访问量也大的业务数据表(如一些流程跟踪档)字段还是要一定冗余的,反反复复表连接是不行的。解决并发锁表、知道何时应该冗余总是一个难题,今天先写到这里,以后有什么好想法再补充。
分享到:
相关推荐
基于ASP.NET的ERP客户管理系统 对CRM系统的ASP.NET实现进行了探讨,论文首先阐述了CRM的研究背景,意义及其...最后对整个设计过程作概要总结,以及一些感受。 ASP.NET;CRM;网络数据库;.Net Framework对象开发库
对CRM系统的ASP.NET实现进行了探讨,论文首先阐述了CRM的研究背景,意义及其内容。并从我们为什么需要CRM、概念...最后对整个设计过程作概要总结,以及一些感受。 ASP.NET;CRM;网络数据库;.Net Framework对象开发库
本文对基于SSM+MySQL的小说阅读网站书城源码数据库论文进行了详细的知识点解读,涵盖了信息化、企业资源计划、小说网站的需求场景、基于SSM的小说网站、MYSQL数据库、SSM框架、B/S设计模式和JS语言等多个方面。
在2013年的中国数据库技术大会上,SAP作为一家全球领先的ERP软件供应商,由其中国业务拓展总监朱旻分享了关于大数据的见解,主题为“SAP让大数据飞翔”。以下是从此次演讲中提炼的知识点: 1. SAP公司介绍 SAP是...
这次我们的设计所做的应用也是根据现实生活当中的需求来进行针对性的功能解决的,所有的业务也好,功能啥的都是根据实际的需求设计而来。旅游行业随着人们对生活水平的提高,那么对旅游需求的增大也在逐步递增,那么...
此次设计就是基于SSM实现的小说网站,了能够考虑到信息安全性和小说网站的数据访问程度,本此设计就采用了MYSQL数据库。另外,做为小说网站来说后面可能对系统进行必要的功能维护,所以在设计初期就采用了B/S的设计...
三、数据库设计 为了存储和管理大量用户生成的内容和交互数据,Sylvan系统会采用关系型数据库(如MySQL)或非关系型数据库(如MongoDB),并使用优化的数据模型和查询策略,确保数据的安全性和系统性能。 四、用户...
系统旨在通过人性化的设计,帮助用户在处理日常业务流程时,感受到更为亲切和舒适的操作体验,从而提升工作效率。以下是关于该系统的详细知识点: 1. **情感化设计**:系统充分考虑了用户的使用感受,采用直观易用...
* 应用系统(ERP/CRM/HR/BW等) * 服务器硬件:X6 - x3850 X6 和 x3950 X6 * SAP HANA®GPFS (Spectrum Scale) 或单节点 XFS * FPO功能 * OS:Red Hat Enterprise Linux 6.6 or 6.7 SUSE Linux Enterprise Server 11...
SAP HANA的出现和应用已经开始对数据库市场产生冲击,其技术的革新性意味着企业将不可避免地感受到变革的压力。正如二十世纪九十年代ERP软件的兴起一样,使用内存计算技术的企业将获得巨大的竞争优势,迫使其它企业...
"在过去的五年里,我参与了多个对日合作项目,如XX项目,该项目是为日本的客户提供定制化的ERP解决方案。在这个项目中,我负责模块的设计和开发,成功实现了系统的高效稳定运行。" 提及你的技术栈和专业技能,突出...
7. **接口集成**:可能需要与其他系统(如CRM、ERP)进行数据交互,实现业务流程的自动化。 在这个"产品管理系统Java源码"中,我们可以看到以下学习点: 1. **MVC设计模式**:Java Web开发中常用的设计模式,将...
"小爱"可能代表了系统的人性化设计,旨在让用户在管理工作中感受到便利与关爱。 【标签】:由于没有提供具体的标签,我们无法直接获取关于系统的特定技术特点或应用场景。通常,标签会包含如“数据库管理”、“项目...
本软件正是克服这些问题,替代ACDSee和Windows自带的图片浏览程序,提供高质量的图片预览,操作方便,给客户良好的感受,同时提升了自己品牌形象。系统分单机版和网络版。 客户在预览图片的过程中就可以将相中的...
此外,系统通常提供接口与第三方软件集成,如ERP(企业资源规划)、CRM(客户关系管理)等,实现更广泛的信息共享和业务流程自动化。 在提供的压缩包文件中,"智能一卡通管理系统_V5.1.1_明锐通_20140719"可能包含...
貌似这一点适应的行业最广,但是我可以很肯定的说:当你从事web开发一年后,重新找工作时,才会真实的感受到这句话。工作第一年,往往是什么都充满新鲜感,什么都学习,冲劲十足的一年;WEB行业知识更新特别快,今天...
貌似这一点适应的行业最广,但是我可以很肯定的说:当你从事 web 开发一年后,重新找工作时,才会真实的感受到这句话。工作第一年,往往是什么都充满新鲜感,什么都学习,冲劲十足的一年;WEB 行业知识更新特别快,...