目录

1.好的数据库设计原则

2.数据库系统设计过程

(1)确定数据库的用途

(2)查找和组织所需的信息

(3)将信息划分到表中

(4)将信息项转换为列

(5)测试与优化设计

(6)应用规范化规则。


设计合理的数据库可以让用户访问最新的、准确的信息。由于正确的设计对于实现使用数据库的目标非常重要,因此有必要投入时间学习良好设计的有关规则。这样,才有可能获
得一个既能满足需要又能适应变化的数据库。

1.好的数据库设计原则

为了获得一个良好的数据库设计必须遵守一些基本原则。
    第一个原则:避免重复数据。
    重复信息(也称为冗余数据)很糟糕,因为重复信息会浪费空间,并会增加出错和不一致的可能性。
    第二个原则:信息的正确性和完整性非常重要。
    如果数据库中包含不正确的信息,任何从数据库中提取出的信息也将包含不正确的信息。因此,基于这些信息所做的任何决策都将提供错误信息。
    所以,良好的数据库设计应该如下:
    (1)将信息划分到基于主题的表中,以减少冗余数据。在数据库管理中,所要处理的数据对象称为主题。例如,在教学管理数据库应用系统中,学生信息、课程信息和成绩信息等都是数据库需要处理的对象,它们都被称为主题。
    (2)向Access提供根据需要联接的表中所需要的信息。    ‘
    (3)可帮助支持和确保信息的准确性和完整性。
    (4)可满足数据处理和报表需求。

2.数据库系统设计过程

设计过程主要包括以下步骤:

(1)确定数据库的用途

这一阶段的工作专业术语称为“需求分析”,这是进行数据库后继设计的基础。在设计中,最好将数据库的用途记录在纸上,包括数据库的用途、预期使用方式及使用者。如果数据库比较复杂或者由很多人使用,数据库的用途可以简单地分为一段或多段描述性内容,且应包含每个人将在何时及以何种方式使用数据库。这种做法的目的足为了获得一个良好的任务说明,是整个设计过程的参考。任务说明有助于设计者在进行决策时将重点集中在目标上。

(2)查找和组织所需的信息

要查找和组织所需信息,请从现有信息着手。例如,在教学管理系统设计中,收集现有的教学管理文档,例如学生名册、教学计划和成绩单等各种表格信息。如果在进行某个系统设计时没有任何现有表格,则必须设计一个表格来记录客户信息。将要在表格中存放哪些信息?在准备此列表时,在开始阶段可能不完美,但是不必为此而担忧。相反,请列出每个想到的项。如果还有其他人使用该数据库,也应向他们征求意见。这样更好地优化。
   接下来,要考虑希望从数据库获得什么信息,什么样的形式,具体说数据库所生成的报表或邮件的类型。例如,在教学管理系统中是按班级输出成绩报表,或按个人输出成绩报表,还是按课程输出成绩报表。设计此类报表先打个腹稿,想象其外观,将在报表中放置哪些信息,并列出每一项。
    考虑可能希望创建的报表和邮件,可以帮助确定数据库中将需要的各个项。例如,如果需要向学生发送成绩邮件,则要在学生表中添加了一个”电子邮件地址”列。
    有一种很好的做法:为每个报表或输出列表构造一个原型,并考虑需要哪些项才能生成该报表。
    需要记住的要点是,应该将每条信息分为最小的有用单元。  
    另外,还要考虑希望从数据库获得的问题。例如,某门课程成绩的优秀率、不及格率是多少?某个学生已经修了多少学分?对这些问题进行估计,可以帮助设计者将精力集中于需
要记录的其他项。
    收集这些信息后,就可以进行下面的步骤。

(3)将信息划分到表中

要将信息划分到表中,请选择主要实体(实体是有可区别性的且独立存在的某种事物)或主题。例如,在查找和组织用于教学管理数据库的信息后,初步列表可能与下图类似。

此处所示的主要实体(主题)为学生、课程和成绩。因此,可以从三个表开始。一个用来存储学生信息,一个用来存储课程信息,一个用来存储成绩信息。尽管这样并没有完成列表,但却是一个很好的起点。从这个起点出发,继续对此列表进行优化,直到获得满意的设计为止。
    在首次检查项的初步列表时,可能非常想将所有项全部放入一个表中,而不是放入图中显示的三个表中。虽然这是在Excel中常常使用的方式,但是在Access数据库中,这是一种
不好的方式。请考虑下面所示的表

课程号

课程名称

学号

学生

成绩

400001

英语

2010012101

李梅

80

400001

数学

2010012101

李梅

75

400002

数学

2O1O0121O2

王峰

85

在这种情况下,每行中同时包含有关课程名称和学生信息。由于同一学生可能选修多门课程,因此学生姓名和课程名称信息不得不多次重复,显然这就浪费了磁盘空间。在单独的"学生"表中仅记录一次学生信息,然后将该表链接到“课程"和“成绩”表,是更好的解决方案。
    这种设计的另一个问题容易出现在需要修改有关课程信息时。例如,假定需要更改课程名称。由于此信息出现在多个位置,有可能会更改了一个位置的课程名称而忘记更改其他位置的
课程名称。而将课程名称的地址记录在唯一位置(表中)就可以非常简单地解决这个问题。
    设计数据库时,应始终尽可能仅记录每个事实一次。如果发现自己在多个位置重复相同的信息(如特定课程名称):则请将该信息放人单独的表中。
    选择了用表来表示的主题后,该表中的列就应仅存储有关该主题的内容.例如,课程表应仅存储有关课程的内容。成绩表存储有关成绩的内容,所以每个表都有一个主题。

(4)将信息项转换为列

要确定表中的列,请确定需要跟踪表中所记录主题的哪些信息。例如,对于“学生”表,  “学号”、  “姓名”、  “系别”、  “专业”、  “班级”    “电子邮件地址’’和“注册号码"就是计划比较好的列初始列表。表中的每条记录包含同一组列,因此,每条记录都存储“学号"、  "姓名”、  “系别”、  “专业”    “班级"和“电子邮件地址”。
    为每个表确定了初始的一组列后,可以对列进行进一步优化。例如,为了让地址便于使用,需要将地址分为两部分:省市和具体地址。例如,在统计一个省的学生情况时,将学生家庭地址的省市和具体地址分开存储是个好方式。一般情况下,如果希望根据信息项进行排序、搜索、计算、统计或生成报表,应当将该项放置在单独的字段中。
    在有些管理系统中,有时候地址还可以迸一步划分。通常地址中包含4个独立的组成部分:国家乃也区、省/市/自治区、城市和街道(或小区)、门牌号(或楼号单元号),有时可以将这些信息分别存储在单独的列中。例如,如果希望按照省/市/自治区执行搜索、筛选或排序操作,则需要将省/市/自治区信息存储在单独的列中。
    还应该考虑数据库是仅存储国内地址的信息,还是也要存储国际地址信息。例如,如果打算存储国际地址,则最好使用“地区”列代替“省/市/自治区”列,因为这样的列既可能存储国内的省/市/自治区,也可能存储属于其他国家/地区的地区。
    在确定列时需要注意计算数据问题。Access 2010增加了计算字段列的新功能。原来版本中,大多数情况下,不应在表中存储计算结果。在希望查看相应结果时,可以使用查询执行计算。而Access 2010中一些计算完全可以通过字段列实现。但是更复杂的计算还是需要通过查询,或者报表来实现的。
    在数据库设计中,需要考虑的问题还有:指定主键和建立表之间的关系。

(5)测试与优化设计

确定所需的表、字段和关系后,就应创建表并使用示例数据来填充表,然后尝试通过创建查询、添加新记录等操作来使用这些信息。这些测试操作可帮助发现潜在的问题,例如,可能需要添加在设计阶段忘记插入的列,或者可能需要将一个表拆分为两个表以消除重复。
    确定是否可以使用数据库获得所期望的答案。创建窗体和报表的粗略草稿,检查这些窗体和报表是否显示所期望的数据。查找不必要的重复数据,找到后对设计进行更改,以消除这种数据重复。  
    在测试初始数据库时,可能会发现可改进之处。根据实际开发工作,往往需要检查以下事项:‘
    a.是否忘记了任何列?如果是的话,该信息是否属于现有的表?如果是有关其他主题的信息,则可能需要创建另一个表,并为需要跟踪的每个信息项创建一列。如果无法通过其他列计算出信息,则可能需要为其创建一个新列。
    b.是否在某个表中重复输入相同的信息?如果是的话,则可能需要将这个表拆分为两个具有一对多关系的表。
    c.是否存在这样的表:具有很多字段,但记录数量有限,且各个记录中有很多空字段?如果有的话,则要考虑对该表进行重新设计,使其包含更少的字段和更多的记录。
    d.每个信息项是否已拆分为最小的有用单元?如果需要对某个信息项进行报告、排序、搜索或计算,则将该项放入其自己的列中。
    e.每一列是否包含有关所属表的主题的内容?如果某一列不满足此条件,则该列属于其他表。
    f.表之间的所有关系是否已经都由公共字段或第三个表加以表示?一对一和一对多关系要求使用公共列,而多对多关系要求使用第三个表来表示。

(6)应用规范化规则。

在系统设计中应用数据规范化规则是数据库设计成功的保证。使用规范化规则来确定表的结构设计是否正确。将这些规则应用到数据库设计的过程称为数据库规范化。
    在完成了所有信息项并完成了初步设计后,规范化过程十分有用。它将确保已经将信息项划分到恰当的表中。
    规范化原则又称为范式。普遍接受的范式有第一到第五共五个范式。大多数数据库设计都要求使用前三个范式。

2.2 数据库应用系统开发方法相关推荐

  1. 数据库应用系统开发方法(知识点总结)

    学习目标: 数据库应用系统开发方法(知识点总结) 学习内容: 数据库的三级模式: 外模式:用户可见的部分数据的存在形式 模式:等价为全体数据的逻辑结构且用户不可见(中间) 内模式:数据库的物理结构和存 ...

  2. 数据库—应用系统开发方法

    目标 1 数据库的基本概念 2 软件工程与数据库技术 3 DBAS 生命周期模型 4 案例分析 数据库的基本概念 1 数据:数据库中存储的基本对象 定义:描述事物的符号序列 种类:数字,文字,图形,图 ...

  3. 第1章 数据库应用系统开发方法

    1.1数据库应用系统生命周期  1.1.1软件工程与软件开发方法  用现代工程的概念管理软件生产与开发全过程的典型方法有:瀑布模型(也称为软件生命周玥模型).快速原型模型.螺旋模型等.  1.瀑布模型 ...

  4. 数据库应用系统开发方法 第三部分

    <1>系统设计 1.1概念设计: 数据库概念模型设计 系统总体设计: DBAS体系结构设计 DBAS系统硬件平台的选择和配置 应用软件结构设计 业务规划初步设计 关键技术的选型和初步设计 ...

  5. 计算机三级-数据库-数据库应用系统开发方法

    数据库的三级模式是由外模式.模式.内模式构成,外模式是用户可见的部分数据的存在形式:模式可以等价为全体数据的逻辑结构且用户不可见,是三级模式的中间部分:内模式对应数据库的物理结构和存储方式.当模式改变 ...

  6. 数据库的应用系统开发方法

    数据库的应用系统开发方法 Date date = new Date(): System.out.println(date); //当前时间:2020-4-2 15:30 本文通过网上查阅资料,老师提供 ...

  7. 三层架构与设计模式思想部署企业级数据库业务系统开发

    1. 三层架构介绍 1.1关于架构 架构这个词从它的出现后,就有许许多多的程序员.架构师们激烈地讨论着它的发展,但是架构一词的出现,却是随着三层架构的出现才出现的.当然,目前应用三层架构开发也正是业界 ...

  8. 产品经理懂点技术:几种常用的系统开发方法

    常用的系统开发方法有: 结构化系统开发方法 原型法 面向对象方法 计算机辅助软件工程方法 下面一一为大家详细介绍: 1 结构化系统开发方法 结构化系统开发方法(Structured System An ...

  9. 动态系统开发方法DSDM

    动态系统开发方法(DSDM)倡导以业务为核心,快速而有效地进行系统开发.可以把DSDM看成一种控制框架,其重点在于快速交付并补充如何应用这些控制的指导原则. DSDM是一整套的方法论,不仅仅包括软件开 ...

最新文章

  1. html引入php文件中的函数,在b2core框架和simple_html_dom.php文件里面都有一个load()函数...
  2. 生活在地球上:网络摘录
  3. CTFshow php特性 web136
  4. Aurora公式编辑器在64位Word 2013不显示选项卡
  5. Jquery 概念性内容编辑器
  6. 包概念与__init__注意事项
  7. 使用pyinstaller打包python程序时问题记录
  8. 中国孩子的micro:bit:TurnipBit自制小乐器教程实例
  9. 词表匹配工具FlashText
  10. php adodb 统计,php之adodb简介
  11. qmc0文件怎么转换mp3_怎么用手机把手机里的视频转换成mp3音乐?(手机,不是电脑)...
  12. 存储过程实现创建修改表及其数据
  13. 【Jmeter】Jmeter java.lang.IllegalAccessError: class com.github.weisj.报错
  14. 智慧供热管理系统提高居民用热的智能化
  15. [UOJ311]积劳成疾
  16. 苹果消息推送服务教程:第二部分(共2部分)
  17. 论文中的参考文献规范
  18. error 系统错误 错误码10007_在Java项目中打印错误日志的正确姿势,排查问题更方便,非常实用!...
  19. 如何理解3D动画中的欧拉角以及死锁?
  20. 形象的解释一下ERP系统的运作流程

热门文章

  1. 播放失败246106异常代码_三菱-菱云系列电梯故障代码
  2. 单点登录系统(SSO)的开发思路
  3. 概率论各种基础分布期望和方差推导过程汇总
  4. 支付宝、微博牛人专家来袭!详解春节红包技术(全程直播)
  5. 免费java视频教程大全在线观看
  6. inplace-operation-error 【已解决】
  7. laravel学习1.0
  8. #define 喵 int_招行10元风暴第4轮出喵攻略
  9. java.sql.timestamp_java.sql.Date和java.sql.Timestamp转换
  10. 深度学习中常见的损失函数(L1Loss、L2loss)