浅谈数据库设计

                                    浅谈数据库设计

  数据库设计的重要性:好的数据库设计有下面的一些作用:

     1、首先充分体现系统的需求,数据库是为应用服务的,好的数据库设计应该首先能满足应用系统的业务需求,准确的表达数据间关系。    2、保证数据的准确性和一致性,通过主外键、非空、限制、唯一索引等保证数据的健壮。    3、提高数据的查询效率,通过合理表结构,安排物理存储分区、增加索引等方式,提高数据的读取速度,提高查询效率。    4、有好的扩展性,在必要时能根据需求扩展数据结构。

在系统设计中对数据库的设计应考虑哪些设计原则 

数据库是整个软件应用的根基,是软件设计的起点,它起着决定性的质变作用,因此我们必须对数据库设计高度重视起来,培养设计良好数据库的习惯,是一个优秀的软件设计师所必须具备的基本素质条件!  那么我们要做到什么程度才是对的呢?下面就说说数据库设计的原则:

1、数据库设计最起码要占用整个项目开发的40%以上的时间 
    数据库是需求的直观反应和表现,因此设计时必须要切实符合用户的需求,要多次与用户沟通交流来细化需求,将需求中的要求和每一次的变化都要一一体现在数据库的设计当中。如果需求不明确,就要分析不确定的因素,设计表时就要事先预留出可变通的字段,正所谓“有备无患”。

2、数据库设计不仅仅停留于页面demo的表面

    页面内容所需要的字段,在数据库设计中只是一部分,还有系统运转、模块交互、中转数据、表之间的联系等等所需要的字段,因此数据库设计绝对不是简单的基本数据存储,还有逻辑数据存储。 
  3、数据库设计完成后,项目80%的设计开发在你脑海中就已经完成了 
    每个字段的设计都是有他必要的意义的,你在设计每一个字段的同时,就应该已经想清楚程序中如何去运用这些字段,多张表的联系在程序中是如何体现的。换句话说,你完成数据库设计后,程序中所有的实现思路和实现方式在你的脑海中就已经考虑过了。如果达不到这种程度,那当进入编码阶段后,才发现要运用的技术或实现的方式数据库无法支持,这时再改动数据库就会很麻烦,会造成一系列不可预测的问题。

 4、数据库设计时就要考虑到效率和优化问题 
    一开始就要分析哪些表会存储较多的数据量,对于数据量较大的表的设计往往是粗粒度的,也会冗余一些必要的字段,已达到尽量用最少的表、最弱的表关系去存储海量的数据。并且在设计表时,一般都会对主键建立聚集索引,含有大数据量的表更是要建立索引以提供查询性能。对于含有计算、数据交互、统计这类需求时,还要考虑是否有必要采用存储过程。

5、添加必要的(冗余)字段 
    像“创建时间”、“修改时间”、“备注”、“操作用户IP”和一些用于其他需求(如统计)的字段等,在每张表中必须都要有,不是说只有系统中用到的数据才会存到数据库中,一些冗余字段是为了便于日后维护、分析、拓展而添加的,这点是非常重要的,比如黑客攻击,篡改了数据,我们便就可以根据修改时间和操作用户IP来查找定位。

6、设计合理的表关联 
    若多张表之间的关系复杂,建议采用第三张映射表来关联维护两张表之间的关系,以降低表之间的直接耦合度。若多张表涉及到大数据量的问题,表结构尽量简单,关联也要尽可能避免。 
  7、设计表时不加主外键等约束性关联,系统编码阶段完成后再添加约束性关联 
    这样做的目的是有利于团队并行开发,减少编码时所遇到的问题,表之间的关系靠程序来控制。编码完成后再加关联并进行测试。不过也有一些公司的做法是干脆就不加表关联。

8、选择合适的主键生成策略。

				
时间: 2024-12-06 16:37:03

浅谈数据库设计的相关文章

浅谈数据库设计技巧(转)

说到数据库,我认为不能不先谈数据结构.1996年,在我初入大学学习计算机编程时,当时的老师就告诉我们说:计算机程序=数据结构+算法.尽管现在的程序开发已由面向过程为主逐步过渡到面向对象为主,但我还是深深赞同8年前老师的告诉我们的公式:计算机程序=数据结构+算法.面向对象的程序开发,要做的第一件事就是,先分析整个程序中需处理的数据,从中提取出抽象模板,以这个抽象模板设计类,再在其中逐步添加处理其数据的函数(即算法),最后,再给类中的数据成员和函数划分访问权限,从而实现封装. 数据库的最初雏形据说源

浅谈数据库设计二三事

作为程序员,程序设计前的数据库设计非常重要,这将直接关系到紧接着的代码编写工作,这里谈谈有关数据库设计过程中的一些细节问题.  一.数据表主键的字段选择(ID,Code,Number) ID(编号)一般是选择GUID,这种格式的字符串是一串全球唯一的字符串.当程序需要调用不同平台上的相同结构的数据库时,建议使用guid来作为主键.这样做的好处是,当在某一平台上汇总不同平台的数据时,同一表中的数据汇总不会出现因为主键相同而无法正常汇总的情况.Code(编码)一般是一串非全数字的字符串,比如字母混合

浅谈数据库框架,见笑,请多指正

浅谈数据库框架,见笑,请多指正 http://weibo.com/p/1001603724746155003486 一友说"插件式存储又割裂了SQL引擎的完整逻辑...总体而言在现有框架下MySQL的优化器没有多大改进的价值". 我们且做个技术分析: 1 插件式框架,可以静态/动态加载组件,方便在同类不同属家的模块间切换,这种设计是良好的. 很多软件的设计都采用了"微内核+插件"这样的方式构筑了强大的应用.如Ecplise生态圈. 2 数据库范围内, MySQL的属

浅谈数据库并发控制 - 锁和 MVCC

在学习几年编程之后,你会发现所有的问题都没有简单.快捷的解决方案,很多问题都需要权衡和妥协,而本文介绍的就是数据库在并发性能和可串行化之间做的权衡和妥协 - 并发控制机制. 如果数据库中的所有事务都是串行执行的,那么它非常容易成为整个应用的性能瓶颈,虽然说没法水平扩展的节点在最后都会成为瓶颈,但是串行执行事务的数据库会加速这一过程:而并发(Concurrency)使一切事情的发生都有了可能,它能够解决一定的性能问题,但是它会带来更多诡异的错误. 引入了并发事务之后,如果不对事务的执行进行控制就会

浅谈数据库去重

关于sql去重,我简单谈一下自己的简介,如果各位有建议或有不明白的欢迎多多指出.推荐网址:www.4-yecao.com 关于sql去重最常见的有两种方式:DISTINCT和ROW_NUMBER(),当然了ROW_NUMBER()除了去重还有很多其他比较重要的功能,一会我给大家简单说说我自己在实际中用到的. 假如有张UserInfo表,如下图: 现在我们要去掉完全重复的数据:SELECT DISTINCT * FROM dbo.UserInfo结果如下图: 但是现在有个新的需求,要把名字为‘张三

透过微博浅谈移动设计规则

[透过微博浅谈移动设计规则]1)清晰的界面布局;2)熟悉的操作控件;3)合理的信息结构;4)可靠的触控范围;5)会呼吸的空间;6)统一的视觉风格;7)舒适的文字排版;8)高质量的图片展示.古有京城八大件,今有爽爷八定律,大家随便感受一下 本文作者 打酱油的孩纸 透过微博浅谈移动设计规则

浅谈数据库之存储过程

浅谈数据库之存储过程 什么是存储过程 如果你接触过其他的编程语言,那么就好理解了,存储过程就像是方法一样. 竟然他是方法那么他就有类似的方法名,方法要传递的变量和返回结果,所以存储过程有存储过程名有存储过程参数也有返回值. 存储过程的优点:    存储过程的能力大大增强了SQL语言的功能和灵活性. 可保证数据的安全性和完整性. 通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全. 通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性. 在运行存储过程前,

浅谈嵌入式软件设计

浅谈嵌入式软件设计 本文在21IC的公众号文章<多年嵌入式编程工程师经验分享:换个角度来编程>基础上结合自己理解而写,部分图片以及文字说明均来自互联网. 前后台模型 模型介绍 当开发过程中不使用OS时,几乎所有的嵌入式程序归根结底都是一个由无法停止的循环为结构构成的,即常见的while(1)或for(;;),用流程图表示就是这样: graph TD stop[结束] start[查询IO或外设状态] --> section1[执行相关业务逻辑] section1 --> condi

浅谈数据库的锁

数据库对于程序猿来 并不陌生,但是数据库的锁你知道多少?数据库的锁直接影响数据性能,在大并发的前提下,怎么保证数据不被死锁,提高数据库性能?如何加锁,何时加锁,加什么锁,你可以通过hint手工强行指定,但大多是数据库系统自动决定的.这就是为什么我们可以不懂锁也可以写SQL. 下面我们来简单谈一谈数据库中的锁,以sqlserver 为例: 数据库锁的种类: 1.共享锁(Shared lock) 何为共享锁,顾名思义意思就是资源共享,所以共享锁之间 是没有时间等待的可以同时执行一条或多条查询语句,共