关于数据库设计的一些理解,很久以前整理过的资料,现在找出来晒一晒,以网上书店设计为例.
网上书店要存储销售给用户的图书信息,这个信息要保存书的国际标准号(International standard book number ISBN号)、书名、出版日期、零售价、分类、出版社名称、订购该书的出版社人员、该书作者姓名
ISBN |
书名 |
出版日期 |
零售价 |
分类 |
出版社名称 |
出版社联系人 |
作者 |
978-7-302-10041-6 |
数据库设计规范 |
2008-01-01 |
50.78 |
数据库类 |
工业出版社 |
张三 |
王清华,李北大 |
988-7-301-10051-7 |
Oracle基础知识 |
2009-01-01 |
70.9 |
数据库类 |
清华大学出版社 |
王五 |
李连发, 钱百万 周万财, |
999-9-401-10081-8 |
Java编码规范 |
2009-3-14 |
100 |
编程类 |
电子出版社 |
李四 |
朱一刀,陈万剑, |
111-0-890-10092-1 |
JSP2.0从入门到精通 |
2008-01-10 |
50 |
编程类 |
电子出版社 |
周大 |
吴江
|
表一:books表
第一步,识别主键。主键是用来唯一标识各个记录的字段。可以选择ISBN号来标识识每一本书,因为任何两本书都不会具有相同的ISBN号。但对于选择主键,我们常规的做法是选择数据库的自增标识来作为主键,为什么不选择ISBN号,主要的原因是主键在存入数据库时可能会因为修改,如果作为主表的主键发生修改,则会产生数据库不一致的情况。但在数据库设计时要对ISBN列建”唯一性约束”
第二步,将可以拆分的属性拆成不可再分的列,分成如下的表。
ISBN |
书名 |
出版日期 |
零售价 |
分类 |
出版社名称 |
出版社联系人 |
作者 |
978-7-302-10041-6 |
数据库设计规范 |
2008-01-01 |
50.78 |
数据库类 |
工业出版社 |
张三 |
王清华 |
978-7-302-10041-6 |
数据库设计规范 |
2008-01-01 |
50.78 |
数据库类 |
工业出版社 |
张三 |
李北大 |
988-7-301-10051-7 |
Oracle基础知识 |
2009-01-01 |
70.9 |
数据库类 |
清华大学出版社 |
王五 |
李连发 |
988-7-301-10051-7 |
Oracle基础知识 |
2009-01-01 |
70.9 |
数据库类 |
清华大学出版社 |
王五 |
钱百万 |
988-7-301-10051-7 |
Oracle基础知识 |
2009-01-01 |
70.9 |
数据库类 |
清华大学出版社 |
王五 |
周万财 |
999-9-401-10081-8 |
Java编码规范 |
2009-3-14 |
100 |
编程类 |
电子出版社 |
李四 |
朱一刀 |
999-9-401-10081-8 |
Java编码规范 |
2009-3-14 |
100 |
编程类 |
电子出版社 |
李四 |
陈万剑, |
111-0-890-10092-1 |
JSP2.0从入门到精通 |
2008-01-10 |
50 |
编程类 |
电子出版社 |
周大 |
吴江
|
表二:删除了多个值的字段,此时已经满足了第一范式。
此时不能再使用书的ISBN号作为主键了,因为已经有重复的行了。所以只能以ISBN号和作者作为联合主键了。
此时表二存在的问题,书名,出版日期只依赖于书的ISBN号,而不依赖于整个联合主键,此时会出现部分依赖,部分依赖会导致插入冗余,修改不一致等情况,解决部分依赖的最简单的方法就是将复合主键分成两部分,每一部分单独作为一个表,在此例中你可以为书创建一个表,为作者创建一个表,消除了部分依赖,数据库表满足了第二范式。
ISBN |
书名 |
出版日期 |
零售价 |
分类 |
出版社名称 |
出版社联系人 |
978-7-302-10041-6 |
数据库设计规范 |
2008-01-01 |
50.78 |
数据库类 |
工业出版社 |
张三 |
988-7-301-10051-7 |
Oracle基础知识 |
2009-01-01 |
70.9 |
数据库类 |
清华大学出版社 |
王五 |
999-9-401-10081-8 |
Java编码规范 |
2009-3-14 |
100 |
编程类 |
电子出版社 |
李四 |
111-0-890-10092-1 |
JSP2.0从入门到精通 |
2008-01-10 |
50 |
编程类 |
电子出版社 |
李四 |
表三,所有的非主属性依赖于主属性的全部。
作者序列(此字段可以作为主键) |
作者姓名 |
1 |
王清华 |
2 |
李北大 |
3 |
李连发 |
4 |
钱百万 |
5 |
周万财 |
6 |
朱一刀 |
7 |
陈万剑 |
8 |
吴江 |
表四,作者表
建立书与作者的关联表,这样就可以通过数据库的关联,形成书与作者信息的显示。
关联表主键 |
ISBN |
作者序列 |
1 |
978-7-302-10041-6 |
1 |
2 |
978-7-302-10041-6 |
2 |
3 |
988-7-301-10051-7 |
3 |
4 |
988-7-301-10051-7 |
4 |
5 |
988-7-301-10051-7 |
5 |
6 |
999-9-401-10081-8 |
6 |
7 |
999-9-401-10081-8 |
7 |
8 |
111-0-890-10092-1 |
8
|
表五,作者与书的关联表
此时的表中值存在传递依赖,存在传递依赖表示至少有一个值不依赖于主键,在此例中表三出版社的联系人不依赖于主属性,而依赖于是哪个出版社,出版社依赖于书的ISBN号,这称为传递依赖,出现这种传递依赖时会依然会出现冗余和修改不一致等情况,出现这种情况依然是要进行表的拆分,将出版社和联系人单独分离为一张表。
ISBN |
书名 |
出版日期 |
零售价 |
分类 |
出版社名称 |
978-7-302-10041-6 |
数据库设计规范 |
2008-01-01 |
50.78 |
数据库类 |
工业出版社 |
988-7-301-10051-7 |
Oracle基础知识 |
2009-01-01 |
70.9 |
数据库类 |
清华大学出版社 |
999-9-401-10081-8 |
Java编码规范 |
2009-3-14 |
100 |
编程类 |
电子出版社 |
111-0-890-10092-1 |
JSP2.0从入门到精通 |
2008-01-10 |
50 |
编程类 |
电子出版社 |
表六书的信息表
出版社名称 |
出版社联系人 |
工业出版社 |
张三 |
清华大学出版社 |
王五 |
电子出版社 |
李四 |
表七出版社信息表
通过以上的分析,数据库的表结构满足了规范化的设计方式,出以上的分析过程我们在进行数据库设计时可以通过以下几个步骤来实现数据库的规范化设计。
1.删除所有的重复组,确定数据库表的主键或复合主键,此时满足数据库的第一范式。
2.满足第一范式后,消除数据库表中的任何部分依赖。此时满足了第二范式。
3.在满足第二范式后,消除任何可传递依赖,此时满足第三范式。
在通常情况下数据库满足第三范式后即可以满足数据设计的要求。
可以看到在数据库设计规范化的过程也就是将数据表进行拆分的过程,在拆分后可以避免插入异常,修改异常,删除异常,数据冗余等问题,但这种拆分同时也会带来另外一个问题,即在查询时一定要进行关联查询,在数据库数据量不是特别大的情况下不会产生效率问题,比如一个10万行的表和1万行的表进行关联,不会产生太大的效率问题,但是当两个100万数据量的表进行关联时,就会出现查询效率的问题,此时就要进行反规范化的设计,反规范化的设计的基本操作有如下几种方式,建立冗余字段,多表合并,建立索引,如果还存在效率问题还可以通过建立分区表,数据截转,按月、按年建立数据表等方式来进行相应的处理,在此不作过多的论述。
那么在进行数据库设计时如何来考虑数据量与数据库的效率问题,如下表关于数据量与数据库设计时的一些考虑。如果1年数据的总行数小于10000行,那么任何的设计和实现都可以。如果1年数据的总行数是100000行,那么在设计时就需要多加考虑,如果第1年的总行数是1000000行,那么在设计时就需要考虑建立冗余,多重粒度的问题,如果第一年的总行数是10000000,那么在设计时就必须考虑建立冗余,分区,分表等技术手段。
数据量与数据库设计考虑
一年数据 |
五年数据 |
||
数据量 |
策略 |
数据量 |
策略 |
10000 |
任何设计策略 |
50000 |
任何设计策略 |
100000 |
谨慎设计 |
500000 |
谨慎设计 |
1000000 |
考虑多表合并、 冗余 |
5000000 |
考虑多表合并、 冗余 |
10000000 |
必须考虑冗余、分区、分表 |
500000000 |
必须考虑冗余、分区、分表 |
相关推荐
学校教务管理系统数据库课程设计心得【模版】.pdf学校教务管理系统数据库课程设计心得【模版】.pdf学校教务管理系统数据库课程设计心得【模版】.pdf学校教务管理系统数据库课程设计心得【模版】.pdf学校教务管理系统...
"数据库心得体会" 数据库心得体会这篇文章记录了作者在进行数据库课程设计项目时的体会和...作者认为毕业设计是很重要的,需要通过实践和学习,掌握数据库设计和开发的技能和知识,以便更好地应对未来的工作和挑战。
数据库设计文档中所列出的一些术语和代码片段,如“BatchInfo”、“Channel_Settle_Cmd”、“Channel_Parm”等,可能是与特定业务逻辑相关的字段或代码命名约定。这表明数据库设计需要与业务流程紧密集成,满足各种...
入侵oracle数据库的一些心得
本资源包“SQL数据库心得”聚焦于分享关于SQL数据库的一些重要概念、最佳实践和常见问题,旨在帮助用户提升SQL技能。 首先,SQL的基本操作包括数据的增、删、改、查(CRUD)。创建(Create)数据库和表结构,通过...
### 教务管理系统数据库设计详解 #### 一、引言 随着信息技术的发展,教育领域的信息化建设也变得日益重要。教务管理系统作为学校信息化建设的重要组成部分,对于提高学校的管理水平和服务质量具有重要意义。本篇...
根据提供的信息,我们可以推断出这是一本关于数据库设计的教程书籍,并且是其第二版。由于具体的页面内容并未给出,我们将基于标题、描述及标签中的信息,对可能涉及的关键知识点进行归纳总结。 ### 数据库设计的...
需求分析、概要设计、详细设计和数据库设计模板 需求分析是软件开发的第一步骤,是指确定软件需求的过程。需求分析的目的是确定软件的功能和性能,以便满足用户的需求。需求分析的输出是软件需求规格说明书(SRS)...
空间数据库实习心得(范本)
数据库课程设计公司或单位员工考勤管理系统是一个基于数据库的员工考勤管理系统,旨在帮助公司或单位更好地管理员工的考勤情况。该系统可以记录员工的出勤、请假、加班等信息,并提供详细的报表和分析功能。 在设计...
### 数据库设计开发规范知识点概览 #### 一、数据库设计开发规范概述 《数据库设计开发规范-阿里.pdf》是一份由阿里巴巴云数据库服务部门编制的技术文档,旨在为数据库设计和开发提供一套全面且规范化的指导原则。...
本文将对 OA 协同办公系统数据库设计的各个方面进行详细的介绍,包括数据库设计的目的和作用、数据库设计的步骤和方法、数据库设计的技术和工具、数据库设计的难点和解决方案等。 1.1 预期的读者 本文的预期读者是...
【数据库课程设计心得体会】 在数据库课程设计的过程中,学生们通常会经历一系列的学习和实践,从而深化对数据库原理和应用的理解。以下是从六篇心得体会中提取的关键知识点: 1. **实践的重要性**:通过实训,...
【数据库课程设计——英语学习助手】是一个综合性的学习平台,旨在提供全面的英语学习支持,包含用户管理、学习工具和数据库管理等多个方面。这个系统具备三种操作模式:游客模式、普通用户模式和管理员模式,以满足...
包括DZ的Ucenter和UcenterHome的数据库,所以这段时间话了近5个小时的时间好好的整理了下数据库方面的基本内容,配合现有的框架来实现快捷的数据库设计,来满足目前项目的需求 参考的数据库文档主要有:目前国内的...
图书馆管理系统数据库设计是一个重要的课程设计任务,旨在让学生掌握计算机管理信息系统设计的基本方法,特别是关系型数据库管理系统的设计与应用。在这一任务中,学生需要完成一个能够处理图书馆日常业务的系统,...
相信大家对数据库肯定并不陌生,但是咋样才能设计出出色的的数据库呢?本文可能对你有些启发,不信你看看... 本书分为五部分 第1 部分— 设计数据库之前 这一部分罗列了12 个基本技巧,包括命名规范和明确业务需求...
理解数据库类型、模型、设计,以及设计的术语;发现良好的数据库设计能为你带来什么好处,以及为什么不好的数据库设计会给你带来痛苦;为你的数据库设定目标,并将其付诸实际的设计;分析一个现有的数据库,以便于你...
学生成绩管理系统数据库设计 本系统的最终用户为管理员,旨在满足学校管理员对成绩管理的需求。系统的主要功能包括用户查询部分和管理员管理部分。在用户查询部分,管理员可以查询学生信息、成绩信息等。在管理员...