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

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

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

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

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

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

转载于:https://www.cnblogs.com/jeancandoit/p/3308028.html

对数据库设计的一点感想相关推荐

  1. 大学生竞赛管理系统-JAVA【数据库设计、源码、开题报告】

    第一章 概述 1.1研究背景 21世纪,我国早在上世纪就已普及互联网信息,互联网对人们生活中带来了无限的便利.像大部分的学校都有自己的系统,由从今传统的管理模式向互联网发展,如今开发自己的系统是理所当 ...

  2. SSM实现的影院订票系统-JAVA【数据库设计、源码、开题报告】

    1绪论 1.1项目开发背景及意义 随着互联网和电子商务的快速发展,网上购物已经成为了现代人生活的一种方式.如今,淘宝.天猫.京东商城.当当网.聚美优品等一系列的电子商务网站更是把网上购物推向了这个时代 ...

  3. 大学生兼职管理平台-JAVA【数据库设计、源码、开题报告】

    第一章 概述 1.1 研究背景 21世纪,我国早在上世纪就已普及互联网信息,互联网对人们生活中带来了无限的便利.像大部分的企事业单位都有自己的系统,由从今传统的管理模式向互联网发展,如今开发自己的系统 ...

  4. 商业智能与大数据结合的一点感想(old)

    0引言 商业智能的概念兴起于上世纪90年代,经过近20年的发展,已经得到广泛的认可和应用.越来越多的中大型企业建设了自己了商业智能系统以提升商业价值,甚至小微型企业也有考虑使用商业智能工具来辅助决策. ...

  5. 在线商城介绍-支付宝沙箱支付-JAVA【数据库设计、源码、开题报告】

    1 绪论 1.1 管理信息系统概述 管理信息系统是计算机在信息管理领域的一种实用技术.通过运用管理科学.数学和计算机应用的原理及方法,在符合软件工程规范的原则下,形成一套完整的理论和方法体系.是一个以 ...

  6. 数据库设计的10个最佳实践

    作者 | Emily Williamson 译者 | 孙薇,责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 以下为译文: 数据库是应用及计算机的核心元素,负责存储运行软件应用所需的一切重 ...

  7. (转)数据库设计范式深入浅出

    关系数据库设计之时是要遵守一定的规则的.尤其是数据库设计范式现简单介绍1NF(第一范式),2NF(第二范式),3NF(第三范式)和BCNF,另有第四范式和第五范式留到以后再介绍.在你设计数据库之时,若 ...

  8. 软件设计是怎样炼成的(6)——打造系统的底蕴(数据库设计)(上篇)

    摘要: 数据库是系统的根基,如果需求变更导致你要经常修改数据库的字段,甚至需要修改表及表关系,相信多折腾几次谁都受不了!因为数据库结构的变化,不仅仅是数据库本身的变更,实体类.数据操作层.逻辑层和表现 ...

  9. cs结构航空订票系统java_VC++航空订票系统数据库设计-课程设计

    VC++航空订票系统数据库设计 目录 一  绪论 1 二 需求分析 1 三 概要设计 2 四 详细设计 4 五 调试分析 19 六 测试结果 20 七 用户使用说明 29 小结 29 参考文献 30 ...

最新文章

  1. 作业要求 20181127-1 附加作业 软件工程原则的应用实例分析
  2. linux命令大全 笔试,Linux基础及常用命令(笔试面试必备)
  3. 【Android 逆向】Dalvik 函数抽取加壳 ( 类加载流程分析 | DexPathList#findClass 函数分析 | DexFile#loadClassBinaryName 函数 )
  4. Oracle数字函数:数字四舍五入,取整以及格式化
  5. C++ 简单实现基数排序(list容器)
  6. python爬虫urllib 数据处理_Python 爬虫笔记之Urllib的用法
  7. Apache默认端口80被占用无法启动服务问题
  8. 单向链表的简单Java实现-sunziren
  9. php+怎么读配置文件的内容,php读取配置文件的代码一例
  10. linux 查找字母c结尾的内容,linux如何查找以某个字母打头的文件或文件夹 比如,/etc目录下很多文件,我想列出所有以c开头的文件或文件...
  11. Android混淆编译Proguard
  12. smbinning包:R语言下的分箱处理工具
  13. lisp 焊缝标注_钢结构深化设计实施方案.doc
  14. 使用UltraISO制作U盘系统启动盘图文教程
  15. 如何理解时间复杂度和空间复杂度
  16. python如何获取图片的尺寸大小_Python获取图片的大小/尺寸
  17. UI自动化框架 基于selenium+pytest和PO分层思想
  18. 基于ug的框架断路器抽屉座运动仿真
  19. Linux系统编程-信号入门2
  20. [Latex] 自动换行 | 正文两端对齐

热门文章

  1. 若依启动sentinel教程
  2. web.xml不同版本的头文件配置
  3. mysql group commit_MySQL5.7 核心技术揭秘:MySQL Group Commit-阿里云开发者社区
  4. jq 直接调用php文件_PHP性能分析工具,你在用哪一个?
  5. python技术简介_Python多线程技术简介,简单,阐述,python
  6. Nacos 配置集导出和导入
  7. linux java heap space_Linux tomcat9 java.lang.OutOfMemoryError: Java heap space 解决方法
  8. 西工大学计算机专业考研容易吗,2022年西北工业大学计算机专业考研成功经验...
  9. java数组r.id_Android HelloViews Spinner教程R.id和R.array无法解析
  10. Failed to load ApplicationContext