随笔分类 -  Database Design

摘要:我在很久之前的一篇文章中介绍了数据库模型设计中的基本三范式,今天,我来说一说更高级的BC范式和第四范式。 回顾 我用大白话来回顾一下什么是三范式: 第一范式:每个表应该有唯一标识每一行的主键。 第二范式:在复合主键的情况下,非主键部分不应该依赖于部分主键。 第三范式:非主键之间不应该有依赖关系。 这是我们设计数据库的基本规则,但是只有这三个规则并不能完全解决数据的增删改的异常情况,下面... 阅读全文
posted @ 2016-08-30 18:42 深蓝 阅读(18853) 评论(1) 推荐(1) 编辑
摘要:最近在读一本《数据库系统 设计、实现与管理》的书,其中的数据库设计部分写的挺好的,另外在本书中也讲到了数据库生命周期的概念,我觉得有所收益,特写下此博文!在软件开发中,我们经常会提到软件系统开发的生命周期,大致分为:计划、分析、设计、实现、运维几个阶段,整体流程和动作如下图所示:而针对数据库建模和数据库应用开发来说,也有其自己的“数据库生命周期”,database life cycle,简称DBL... 阅读全文
posted @ 2015-10-15 18:45 深蓝 阅读(5036) 评论(0) 推荐(1) 编辑
摘要:在业务需求中,经常需要我们在系统中能够记录历史信息,能够查看到历史变动情况,这时我们可以通过增加开始结束时间字段来记录数据的历史版本。对数据的历史记录主要分为:关系、属性历史,实体历史和变更历史。关系、属性历史记录所谓关系历史记录就是指两个实体之间的关系存在历史版本。比如部门表和员工表,对于某一个时... 阅读全文
posted @ 2015-08-03 20:57 深蓝 阅读(2253) 评论(0) 推荐(1) 编辑
摘要:前一篇博客我已经把各个实体分析了一遍,从分析中可以看到,这个公司是做本地采购,生产,然后通过网站和门店进行国际销售的。所以这里会涉及到一些国际化的问题。接下来就来分析一下有哪些国际化需要注意的问题和数据库模型中的解决方案。语言AdventureWorks数据模型中,只有对ProductDescrip... 阅读全文
posted @ 2015-07-28 18:22 深蓝 阅读(2083) 评论(4) 推荐(1) 编辑
摘要:最近打算写写数据库建模的文章,所以打算分析微软官方提供的SQL Server示例数据库AdventureWorks,看看这个数据库中有哪些值得学习的地方。首先我们需要下载安装一个SQL Server数据库引擎,然后下载示例数据库,这里笔者用的是SQL2008R2,所以下载的是AdventureWorks2008R2,下载地址:http://msftdbprodsamples.codeplex.co... 阅读全文
posted @ 2015-07-24 20:37 深蓝 阅读(7911) 评论(1) 推荐(3) 编辑
摘要:在数据仓库建模中,很重要的模型就是星型模型,在星型模型中我们将表分为维度表和事实表,事实表中存放的可以进行计算(汇总,平均等)的列就是度量值。要进行计算的度量值,可以选择的数据类型也有好多种,那么我们应该选择哪一种呢? 首先定个大的方向,是整数还是小数?如果是整数,那么我们可以选择的数据类型就只有int和bigint了,16位或者8位的整数基本不用考虑,在数据仓库这种大数据量的环境下,很容易就o... 阅读全文
posted @ 2013-11-15 10:23 深蓝 阅读(2295) 评论(0) 推荐(1) 编辑
摘要:在企业数据库设计中,经常会遇到一个需求,就是希望把操作之前的数据保留下来,能够看到操作之前是什么数据,操作之后是什么数据。对于这种需求,我们可以使用保留历史数据或者使用版本来实现。 为了能够保留历史数据,在版本设计时有以下方案: 一、使用版本号 版本号是一种常见的版本设计方案,就是在要进行历史数据保留的表上面增加一个版本号字段,该字段可以是DateTime类型,也可以是int类型,每进... 阅读全文
posted @ 2013-09-09 17:28 深蓝 阅读(14766) 评论(6) 推荐(7) 编辑
摘要:在实体关系模型中,我们知道有三种关系:一对一、一对多、多对多。这只是概念上的关系,但是在真实的关系数据库中,我们只有外键,并没有这三种关系,那么我们就来说一说在关系数据库管理系统中,怎么实现这三种关系。一对多这里先讲解一对多,因为这个关系最简单。一对多和多对一是一回事,所以就不再提多对一这个词。一对多的概念是一个对象A会对应多个对象B,而从B的角度看,一个对象B只会对于一个对象A。比如说班级和学生就是一对多关系。一个班级对应多个学生,一个学生只会对于一个班级。一对多的关系之所以说简单,是因为RDBMS的外键其实就是表示一对多关系。对于一对多关系,我们只需要在“多”的这个表中建立“一”的外键关联 阅读全文
posted @ 2013-09-09 14:22 深蓝 阅读(9815) 评论(1) 推荐(8) 编辑
摘要:在数据库设计时,主要就是对实体和关系的设计,实体表现出来就是表,关系表现出来就是外键。而对于一个表,由两部分组成:主键和属性。主键的简单定义就是表中为每一行数据的唯一标识。其实更准确的说法,每一行数据的唯一标识是候选键(Candidate Key),一个表中可以有很多个候选键,主键是候选键中的一个,主要用于更方便的检索和管理数据。一个表中可以有多个候选键,但是只有一个主键。由于主键常常用于检索数据,也用于表之间的关联,所以主键的设计的好坏将会严重影响数据操作的性能。下面来介绍下主键设计的几个考虑因素。主键的数据类型最常见的主键数据类型是数字类型、固定长度的字符类型和GUID类型。通常情况下,R 阅读全文
posted @ 2013-09-09 10:36 深蓝 阅读(17193) 评论(2) 推荐(6) 编辑
摘要:一讲到数据库设计,大家很容易想到的就是三范式,但是第四、第五范式又是什么,不是很清楚,三范式到底怎么区分,也不清楚,作为数据库设计的基础概念,我再讲解下数据库范式。 Normal form Brief definition 1NF First normal form Table ... 阅读全文
posted @ 2013-09-06 17:19 深蓝 阅读(3200) 评论(0) 推荐(4) 编辑
摘要:在通常的数据库设计中,我们定义了每个实体有多少个属性,每个属性的数据类型是什么,有多长,是否允许为空,有什么约束条件等,这些定义是完全静态的,系统创建时就全部定义好,不能动态修改。但是对于实体的属性变化很快,或者实体和属性由用户在系统中自行定义的情况下,那么就需要一个可以动态扩展的数据库模型,以保存各种动态产生的数据。 比如我们要做一个电子商务网站,需要建立一个商品表以保存各种要卖出的商品的属性... 阅读全文
posted @ 2013-09-02 21:09 深蓝 阅读(7995) 评论(5) 推荐(3) 编辑
摘要:之前做的项目涉及到中国大陆和纽伦新港的用户使用,也就需要做成一个多语言的系统,现在总结下其中一些经验和思考。 首先我们需要确认我们要做的系统,多语言到底是要做多少种语言,以后会不会要求增加更多的语言。比如我们做一个给中国大陆和纽伦新港使用的系统,可以确定的语言就是简体中文、繁体中文和英语,而且可以确定以后也不会增加语言。确定以后是否需要增加语言这一点很重要,决定了我们在数据库设计时,是否需要考虑... 阅读全文
posted @ 2013-04-03 17:13 深蓝 阅读(10924) 评论(5) 推荐(2) 编辑
摘要:在做项目时,经常在项目中会遇到有些值是通过其他表经过计算得来的,然后将计算结果保存到数据库中。比如在一个休假系统中,一个员工每年已休天数就是一个计算值,通过SUM员工的所有有效休假申请单可获得。再比如交易系统中的余额字段,对一个账号的所有流水进行SUM,所有收入减去所有支出就是余额。再比订单系统中,订单的总金额字段,就是订单明细的金额的SUM值。对于这些字段,都有一个共性,那就是这个字段是可以通过其他表的字段计算出来的,可以认为这个字段是冗余的,如果没有这个字段,那么我们的系统仍然可以设计出来并且功能一个都不会少。这个字段主要为了提高查询的性能,出报表时也方便,效率高。既然是一个冗余字段,那么 阅读全文
posted @ 2013-03-25 17:47 深蓝 阅读(3180) 评论(0) 推荐(0) 编辑
摘要:前段时间做一个项目,其中涉及到报表部分编写了大量复杂的SQL,比如其中的一个存储过程就有700多行。项目上线过后,进入维护阶段,发现大量的SQL很难维护。于是总结点经验教训:设计一、数据库命名遵循一些通用规范。数据库命名规范是个基本的命名标准,每个团队都有自己的命名规范,我们做项目中以全大写下划线分割作为标准。表名或字段名要准确表达其业务含义。以DATE结尾的数据类型都是date类型,以TIME结尾的数据类型是datetime类型。以IS开头的都是bool类型。二、大数据对象列应该独立成表。比如员工照片是一个blob对象,按照范式来说,这个字段完全可以放在Employee表中,但是出于性能的考 阅读全文
posted @ 2013-03-18 16:58 深蓝 阅读(4698) 评论(0) 推荐(0) 编辑
摘要:网上流传着一份关于数据库设计的文档《数据库设计指南》收集了几十个数据库设计大牛在项目中总结出来的Best Practice最佳实践,我最近也花了点时间细读并结合自身实际进行了总结,感觉自己在项目中还是有不少不足的地方,下面逐条分析下。(黑字为原文,红字为我的见解)数据库设计指南 如果把企业的数据比做生命所必需的血液,那么数据库的设计就是应用中最重要的一部分。有关数据 库设计的材料汗牛充栋,大学学位课程里也有专门的讲述。不过,就如我们反复强调的那样,再好的 老师也比不过经验的教诲。所以我们最近找了些对数据库设计颇有造诣的专业人士给大家传授一些设 计数据库... 阅读全文
posted @ 2012-05-08 16:18 深蓝 阅读(2592) 评论(0) 推荐(0) 编辑
摘要:在面向对象的编程中,使用对象的继承是一个非常普遍的做法,但是在关系数据库管理系统RDBMS中,使用的是外键表示实体(表)之间的关系,那么对于继承关系,该怎么在RDBMS中表示呢?一般来说有3种实现方式:Concrete Table Inheritance(具体表继承)Single Table Inheritance(单表继承)Class Table Inheritance(类表继承)比如在一个教务系统中,有老师学生2个对象,这两个对象都是“人”对象的子类,所以我们可以建立一个Person表,该表有人的公共属性:姓名、性别等,还有就是数据的唯一标识,一个ID。而教师对象有教师的特有属性,比如职称 阅读全文
posted @ 2011-08-16 15:30 深蓝 阅读(12076) 评论(2) 推荐(5) 编辑
摘要:近期在做一个业务系统的分析和数据模型设计,工作这几年也做过好几个项目的数据库模型的设计,期间也算是积累了一定的经验吧,这次有机会就写写我的数据库模型设计过程与方法。在数据库设计中,设计的目标就是要建立E-R图(实体-关系图),在PowerDesigner中就是要建立概念模型或者逻辑模型。既然是实体-关系图,所以整个建模的核心就是围绕建立“实体”对象和找到实体之间的“关系”。实体分为两部分:标识(主键)和属性。标识是实体的一个或多个属性的组合,用于唯一的表标识出实体中的每一个数据。在确认一个实体的过程中,首先就是要确认实体的主键,只要找到了实体的主键,那么剩下的就是实体的属性。1.确认核心实体在 阅读全文
posted @ 2010-01-11 11:48 深蓝 阅读(26436) 评论(11) 推荐(11) 编辑


我要啦免费统计