• 对数据库设计的一点感想


        在大学里,数据库的学习使用的是《数据库系统概念》这本书,英文名为Database System Concepts,由于当初我使用的是翻译版,翻译的水平真的不敢恭维,因此花钱复印的那本书根本没有看多少。由于课堂上老师注重理论的讲解,很空洞无聊,从而大学里学习的数据库知识仅靠自己平常做项目零碎地积累的那点知识。在学校做的项目要么数据库设计非常简单(也许只有十几张表的那种),要么就是课程对应的课程设计,根本不用去考虑并发访问、事务处理、触发器,也不会去考虑太多数据库的数据冗余度和数据库性能问题,因此当初自以为数据库设计实在太简单了,却万万没有想到,实际的数据库设计是多么的复杂。这篇文章是以一个菜鸟的身份来谈数据库的设计,希望大牛们多多提意见和建议。

        毕业后,来到一家国内知名软件公司工作,其实我内心里想从事的行业是互联网,想从事的领域是Java系统开发设计以及数据库设计。谁知由于考研失败,13年3月底才开始找工作,在这个最难就业季,没有多少公司来招聘了,最终不得已选择了一家软件公司,并且从事.NET开发,至于数据库,工作中也就偶尔建几张表而已。即使如此,我仍然没有放下对Java和数据库的喜爱,由于本人所在公司加班少,空余时间较多,因此决定自己独立设计一个有史以来自己开发的最大的应用系统,采用SSH框架,数据库使用Oracle,在系统设计过程中要学习很多Oracle的基本知识,现在感触最深的是Oracle权限管理真的做得非常好,难怪它的安全性是其它很多数据库无法超越的。

        系统分为多个子系统,其中一个重要的子系统就是心理测量。对于心理测量,最通俗的说法就是心理测试了,但是心理测试包含的范围还是挺广的,如人格测试、特殊能力测试等,不同的测试问卷一般对应于不同的算法。比如有名的心理测试问卷卡特尔十六种人格因素测验,它包含了187道题母,共有17种因素,在计算各种因素的得分时,首先要对应原始计分表得到原始分,然后再对应标准分换算表得到标准分。既然不同的问卷有不同的算法,那么就无法用一个通用的应用程序来实现所有问卷的算法过程。也就是说,需要为不同的问卷开发不同的应用程式模块。

        应用程序模块就这么定了,那么数据库的设计该如何进行呢?我一开始就这样设计的,把数据库里存在的表分为系统通用表和问卷表,也就是说,我将会对不同的问卷创建不同的问卷表。这样做的话,问题就来了,比如我想用一张表来保存用户最终的测试结果,那么这张表就需要引用不同的问卷表里面的内容,也就是说我每次创建新的问卷表的话,就要去修改测试结果表,先不说工作量了,这样很可能会导致后面应用程序的开发难度非常大,严重影响着系统的扩展性。而且,如果我以后想对测试系统进行升级,比如测试的问题和答案可以包含图片等信息,那么我要去很多问卷表里修改相应的字段,这些工作量以及可能对系统造成的破坏是不可想象的。因此我一直在思考如何解决这个问题。

        最后,我决定对不同问卷的数据换一种方式进行存储,就是把所有问卷的题目、答案和因素等信息各自存储在同一张表里,也就是不同的问卷题目存储在一张表里,答案存在一张表里…这样的话,我每创建一个新的问卷就不用去设计数据表了。

    现在已经工作了两个月了,发现公司与学校最大的不同点是,公司所有的技术都是实用的,而学校学到的只有极少技术可以直接在实际工程中使用,还有就是工作后亲自动手去实践能够比在学校捧着一本砖头书学得更快。但是学校的学习阶段是万万不能缺的,我之前没怎么接触.NET的内容,但现在工作上自学起来得心应手,这完全得益于我在学校所学的理论基础以及培养的自学能力。对于数据库的设计,虽然工作上根本没什么发挥的余地,但是在公司创建一些简单的表也可以让我学习到规范命名等实用的技能。希望那些还在学校的小伙伴们多注重实际能力的培养,要在实践中深入理解课堂学习的理论知识。

     

  • 相关阅读:
    如何实现一个教师与学生教学辅助平台?
    面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?请根据自己的理解简明扼要的回答。
    2..移动APP开发使用什么样的原型设计工具比较合适?
    new delete和malloc free的区别
    char * 和char[]的区别以及怎样与string类型进行转换
    浅谈const的基本用法
    c++ map按key或value的值分别进行排序
    二叉树及先序,中序,后序遍历
    c++发展趋势
    markdown 的基本操作
  • 原文地址:https://www.cnblogs.com/jeancandoit/p/3308028.html
Copyright © 2020-2023  润新知