作为程序员,程序设计前的数据库设计非常重要,这将直接关系到紧接着的代码编写工作,这里谈谈有关数据库设计过程中的一些细节问题。

  一.数据表主键的字段选择(ID,Code,Number)

  ID(编号)一般是选择GUID,这种格式的字符串是一串全球唯一的字符串。当程序需要调用不同平台上的相同结构的数据库时,建议使用guid来作为主键。这样做的好处是,当在某一平台上汇总不同平台的数据时,同一表中的数据汇总不会出现因为主键相同而无法正常汇总的情况。Code(编码)一般是一串非全数字的字符串,比如字母混合数字格式的字符串。特别是,在设计存在多级关联关系的对象模型时。比如人员部门结构,商品多级分类等树状结构关系的对象模型时(见下图)。

  如上图所示的部门结构,在数据库中设置一个部门的编码Code,结构如图中加色的数字。这样做的好处是可以很容易根据这样的编码来取到部门的信息。比如,要获取分局3(0103)下面所属的所有所一级的人员信息,则可截取表中部门编码的前四位,判断其是否等于0103,这样即可获得分局3下面所有所一级的部门编码,再从人员信息表中读取人员信息就非常简单了。Number(序号)一般用在标识记录需要连续计数时,通常是系统自增长生成或者程序自动生成得到。比如某一实物存在多个时,可以使用序号来进行区分。比如图书馆中,一模一样的图书存在多本的时候,可以用一个序号来区别。同时,这样还可以很直观的看出这个对象有多少个相同的个体记录,前提是数据未删除过。设计数据库的时候可以根据具体的情况加以选择,从而达到事半功倍的效果。

  二.空间换时间的思想

  当一张主表和多张从表存在主外键关系时,通常的做法是在主表中存取从表记录的主键信息。这样读取信息的时候,就需要联合两张以及两张以上的表进行数据读取和组合得到我们需要的信息。数据库思想中,有提到数据库设计应尽可能避免数据冗余,这样可以节省数据存储所占的空间。但是,在当今社会。硬件技术飞快发展的年代,存储介质的存储空间已经可以越来越大,基本不用考虑数据库占用的问题。尽管存储介质的发展很快,但是电脑的处理速度却难以跟上。所以,设计数据库的时候,尽可能考虑怎么使得操作能够快速响应,以节省用户等待的时间。这就是空间换时间的思想。比如说,主表中需要存储用户表中的用户姓名,用户表数据量很大,那么可以考虑在主表中直接存储用户的姓名而不是保存用户信息记录的主键信息。这样,只查询主表即可得到我们需要的信息,而不需要再去联合用户表去查询了。当然,这里也不是通用的做法,有几点需要注意。首先这个涉及从表的字段应该是基本上不会再和其他的业务过程产生联系的,比如我只需要在查询的时候显示这个名字而不需要对其再错查询或者修改等其他一系列的业务操作。另外呢,这个数据需要作为历史记录去查阅,那么就尽可能存储信息本体而不是信息本体所在表记录的主键了。否则,当从表信息修改之后,再次查询记录的时候就会发现与实际情况不符的情况。比如某家公司的快递寄送人是公司的前台,但是前台总会有人事变动,人不在,但是工号还在,会移交给新人使用。那么记录寄件人的信息时就直接保存寄件人的姓名。有时候,我们还会选择将从表的主键以及信息主体直接存储在主表中。比如保存用户的名字同时存储用户的工号。这样,在检索的时候就可以根据工号直接得到主表信息,同时得到用户的工号和姓名。虽然这样做存在数据冗余的情况,但是为了查询的效率,这样做未尝不是一种好办法。

  最后,提一下。数据库的设计应该以实际情况为主,理论为辅,兼顾执行效率。不同情况下,这些做法不一定都适合,具体情况具体分析吧。

转载于:https://www.cnblogs.com/pinzi/archive/2013/01/04/4224969.html

浅谈数据库设计二三事相关推荐

  1. 浅谈数据库设计技巧(上)

    浅谈数据库设计技巧(上) 说到数据库,我认为不能不先谈数据结构.1996年,在我初入大学学习计算机编程时,当时的老师就告诉我们说:计算机程序=数据结构+算法.尽管现在的程序开发已由面向过程为主逐步过渡 ...

  2. 转《浅谈数据库设计技巧》

    说到数据库,我认为不能不先谈数据结构.1996年,在我初入大学学习计算机编程时,当时的老师就告诉我们说:计算机程序=数据结构+算法.尽管现在的程序开发已由面向过程为主逐步过渡到面向对象为主,但我还是深 ...

  3. 浅谈数据库设计技巧(实例一定的数据冗余)

    说到数据库, 我认为不能不先谈数据结构.1996年,在我初入大学学习计算机编程时,当时的老师就告诉我们说:计算机程序=数据结构+算法.尽管现在的程序开发已由面 向过程为主逐步过渡到面向对象为主,但我还 ...

  4. 浅谈IP地址二三事 IP地址代表什么,网络号主机号是什么?

    IP地址 最近准备教资的面试,自然准备的信息技术.能看到好多简单,但是容易忘记的知识点,就算是我这样准备毕业,就要去工作的计算机专业的学生来说.也总是能忘.故记录 IP:internet protoc ...

  5. catia三维轴承_浅谈基于CATIA二次开发的单排四点接触球轴承三维设计论文

    浅谈基于CATIA二次开发的单排四点接触球轴承三维设计论文 一.概述 单排四点接触球转盘轴承是一种能够同时承受较大轴向负荷.径向负荷和倾覆力矩等综合载荷,集支承.旋转.传动.固定等多种功能于一身的特殊 ...

  6. 用户数据表设计借鉴 浅谈数据库用户表结构设计,第三方登录 基于 Token 的身份验证

    最近对用户数据表的设计比较感兴趣,看到了两篇比较好的文章. 浅谈数据库用户表结构设计,第三方登录 转载于: https://www.cnblogs.com/jiqing9006/p/5937733.h ...

  7. 并发执行变成串行_大神浅谈数据库并发控制 锁和 MVCC

    在学习几年编程之后,你会发现所有的问题都没有简单.快捷的解决方案,很多问题都需要权衡和妥协,而本文介绍的就是数据库在并发性能和可串行化之间做的权衡和妥协 - 并发控制机制.  如果数据库中的所有事务 ...

  8. 浅谈数据库发展史和 OceanBase 的诞生

    浅谈数据库发展史和 OceanBase 的诞生 原创 杨传辉 OceanBase 昨天 本文作者:杨传辉(花名:日照)蚂蚁集团资深总监.OceanBase 研发总经理,全面负责 OceanBase 研 ...

  9. mysql系统研究现状_浅谈数据库的现状和发展 毕业论文.doc

    浅谈数据库的现状和发展 摘 要 学生学籍管理系统是一个教育单位不可缺少的部分,它的对于学校管理至关重要学生学籍管理系统能够为用户提供信息和快捷的查询手段.使用传统人工方式管理文件学籍,这种管理方式存在 ...

最新文章

  1. reactor与proactor模式
  2. 三星s6 android 5.1.1,谷歌亲儿子们痛哭:三星S6都升级安卓5.1.1了!
  3. endnote初始化数据库支持_5 个免费的在线 SQL 数据库环境,比Navicat 香
  4. matlab数学实验课件4,数学实验4_数学实验_doc_大学课件预览_高等教育资讯网
  5. SAP BTP 应用 mta.yaml 里的 sap-btp-project1-dest-content module
  6. 工作338:pc重置筛选条件
  7. Collapse Hierarchy(折叠继承体系)
  8. 石头剪刀布小游戏开发的需求说明
  9. Servlet验证码功能
  10. Python的安装(源码编译安装,IDE安装)
  11. JAVA的对象访问定位
  12. 用python导出pptx中每一页的标题
  13. 移动宽带连接不上mysql_MySQL Workbench 6.2.4 下载 因为移动网络打不开官方也可能是国内网络问题 备用自己...
  14. mysql driver pdo_关于 php mysql pdo cannot find driver 解决方案
  15. Flash Builder4.7破解方法
  16. mac上如何提取图片上的文字?几款不错的OCR文字识别工具推荐
  17. https://www.cnblogs.com/skywang12345/category/455711.html
  18. H5播放flv视频流
  19. 银行安防视频监控系统设计
  20. kettle的调度监控平台

热门文章

  1. android 上下收缩动画,Android 带有弹出收缩动画的扇形菜单实例
  2. abaqus利用python实现部件合并_在abaqus python中使用Element()构造函数创建部件元素...
  3. php 调用图,php 缩略图类(附调用示例)
  4. jsonarray转化list对象_第8篇:Cython的面向对象--Python类 vs Cython扩展类
  5. 【牛客网】:数据结构——时间复杂度,算法复杂度
  6. Redis的AOF持久化的实现
  7. 宏定义Define的一些用法
  8. Extjs 从grid中导出Excel表格。后台为C#(绝对好用)
  9. 奇异值与主成分分析(PCA)
  10. 轻量级数据交换格式JSON