关于数据库设计的一些理解,很久以前整理过的资料,现在找出来晒一晒,以网上书店设计为例.
网上书店要存储销售给用户的图书信息,这个信息要保存书的国际标准号(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 |
必须考虑冗余、分区、分表 |
相关推荐
数据库课程设计毕设资源整理. 数据库课程设计毕设资源整理. 数据库课程设计毕设资源整理. 数据库课程设计毕设资源整理. 数据库课程设计毕设资源整理. 数据库课程设计毕设资源整理. 数据库课程设计毕设资源整理. ...
网吧管理系统数据库设计和相关文档网吧管理系统数据库设计和相关文档网吧管理系统数据库设计和相关文档网吧管理系统数据库设计和相关文档以及相关报表网吧管理系统数据库设计和相关文档网吧管理系统数据库设计和相关...
"数据库心得体会" 数据库心得体会这篇文章记录了作者在进行数据库课程设计项目时的体会和...作者认为毕业设计是很重要的,需要通过实践和学习,掌握数据库设计和开发的技能和知识,以便更好地应对未来的工作和挑战。
数据库操作实验课程设计过程及心得体会模板数据库操作实验课程设计过程及心得体会模板数据库操作实验课程设计过程及心得体会模板数据库操作实验课程设计过程及心得体会模板数据库操作实验课程设计过程及心得体会模板...
数据库设计文档中所列出的一些术语和代码片段,如“BatchInfo”、“Channel_Settle_Cmd”、“Channel_Parm”等,可能是与特定业务逻辑相关的字段或代码命名约定。这表明数据库设计需要与业务流程紧密集成,满足各种...
### 教务管理系统数据库设计详解 #### 一、引言 随着信息技术的发展,教育领域的信息化建设也变得日益重要。教务管理系统作为学校信息化建设的重要组成部分,对于提高学校的管理水平和服务质量具有重要意义。本篇...
根据提供的信息,我们可以推断出这是一本关于数据库设计的教程书籍,并且是其第二版。由于具体的页面内容并未给出,我们将基于标题、描述及标签中的信息,对可能涉及的关键知识点进行归纳总结。 ### 数据库设计的...
"学生选课系统数据库设计" 学生选课系统数据库设计是指根据学生选课系统的需求,设计和实施一个高效、可靠的数据库系统,以满足学生选课的需求。该系统涉及到多个方面,包括可行性分析、系统分析、逻辑设计、数据库...
需求分析、概要设计、详细设计和数据库设计模板 需求分析是软件开发的第一步骤,是指确定软件需求的过程。需求分析的目的是确定软件的功能和性能,以便满足用户的需求。需求分析的输出是软件需求规格说明书(SRS)...
学生信息管理系统 项目数据库设计说明书 第一部分:课程设计内容 2 第一章 绪论 2 1课题简介 2 2设计目的 3 3设计内容 3 第二章 需求分析 4 1功能需求 4 1.1 学生(Student)用户 4 1.2教师(Teacher)用户 4 1.3 ...
空间数据库实习心得(范本)
### 数据库设计开发规范知识点概览 #### 一、数据库设计开发规范概述 《数据库设计开发规范-阿里.pdf》是一份由阿里巴巴云数据库服务部门编制的技术文档,旨在为数据库设计和开发提供一套全面且规范化的指导原则。...
【数据库设计说明书】是指导数据库开发过程的重要文档,它详细阐述了数据库的规划、结构和管理,确保系统能够高效、稳定地运行。本篇将详细解释设计说明书的主要内容,为数据库设计提供清晰的路径。 1. 引言部分 ...
"数据库设计大作业(完整版)" 本资源为大连理工大学软件学院的数据库设计大作业,背景为某一农产品网上商城系统的数据库设计。该系统有居民、销售商两个身份,他们各自所具有的操作描述如下: 业务规则 1. 角色...
本文将对 OA 协同办公系统数据库设计的各个方面进行详细的介绍,包括数据库设计的目的和作用、数据库设计的步骤和方法、数据库设计的技术和工具、数据库设计的难点和解决方案等。 1.1 预期的读者 本文的预期读者是...
图书馆管理系统数据库设计是一个重要的课程设计任务,旨在让学生掌握计算机管理信息系统设计的基本方法,特别是关系型数据库管理系统的设计与应用。在这一任务中,学生需要完成一个能够处理图书馆日常业务的系统,...
《自己动手设计数据库》主要讲述数据库的设计,讨论了如何建立表结构、确定主键、设置字段说明、建立表关系、确立业务规则、建立视图和各层次的数据完整性,以及如何避免不好的设计等问题。《自己动手设计数据库》...
在电子商务领域,数据库设计是构建高效、稳定且可扩展的在线交易平台的关键环节。"电子商务数据库设计C2C"这一主题涵盖了消费者对消费者(Consumer-to-Consumer)交易模式下的数据架构和存储策略。以下是对这个主题...
该实践性环节对于巩固学生的数据库知识,系统地掌握数据库设计理论与应用,加强学生的实践动手能力和提高学生的综合开发经验十分重要和必要。 本课程分为系统需求分析与数据库设计、应用程序功能设计和系统集成调试...
学生成绩管理系统数据库设计 本系统的最终用户为管理员,旨在满足学校管理员对成绩管理的需求。系统的主要功能包括用户查询部分和管理员管理部分。在用户查询部分,管理员可以查询学生信息、成绩信息等。在管理员...