《自己动手设计数据库》第一部分摘录

首先本人捡到宝了,毕业设计需要,开始学习数据库设计,结果去图书馆借了这本书《数据库设计入门经典》,看了3页,简直生无可恋了,谁翻译的,泥出来,我和你谈谈人生。最后果断放弃,再去图书馆借了这本《自己动手设计数据库》,良心之作啊,真的,简洁的语言和简单的例子,仿佛看见了天堂,所以特地把其中的内容摘录出来,便于自己以后查阅,就当是做笔记了。

还有书上的知识点很全面,但是我只是摘录了自己认为重要的,所以遗漏了很多内容,最好还是自己去看书,这绝对是本看着看着就入迷的书,你不会后悔的。

第一部分


第1章 关系数据库

数据库类型

数据库分为操作型数据库(operational database)和分析性数据库(analytical database)。

操作性数据库

说句人话就是经常更改内容的数据库,所以主要用于联机事务处理(online transaction processing,OLTP)联机事务处理这个鬼畜的名字是英文翻译过来的,别纠结,即需要收集、修改和维护日常数据的情况。想网上商城的存货数量,就是使用操作性数据库的,因为他的数据总是处于不断更新的状态。

分析性数据库

与操作性数据库对应,就是数据不经常改动的,所以主要用于联机分析处理(online analytical processing,OLAP)又一个鬼畜的名字,用来存储并追踪历史性和时间性的数据,从而根据这些数据做出判断与预测,例如根据以往的股市行情判断这支股票是否会涨。


早期数据库模型

早期的数据库模型有层次结构模型(hierarchical database model)和网状数据库模型(network database model)。

层次结构模型

这种数据库中的数据是按照层次结构组织的,通常图解为倒置的树状结构。其中一个表作为倒置树状图的“根”,其他表则是由根生发的枝条。

这里看一下它的图片:
这里写图片描述
本来还有很多的内容,但是在这里不介绍了,主要是计算机存储的原因,跟我们后面的设计无关,所以了解一下就好,有兴趣的可以自己去百度,其中能刷新你认知的点还蛮多的。

网状数据库模型

网状数据库的结构用术语节点(node)和集合结构(set structure)表示。

一个节点表示一个记录集合,一个集合结构建立并表示网状数据库中的一种关系。

说句人话就是一个节点可以理解为表,而集合结构则表示表与表之间的联系。具体内容看下图。
这里写图片描述
接着来说说这种模型的特点,比起上面的层次结构模型,多了一个集合结构的东西,感觉这玩意很像后来的主键和外键,将两个节点联系起来。

这里写图片描述

关系数据库模型

也就是我们现在最常见的数据库模型,与近几年兴起的nosql(not only sql),非关系型数据库对应,boss般的存在。

关系型数据库的优势
  • 内置多层次完整性。字段级:确保数据的准确性,表层次:确保主键是不重复的,关系层次:主、外键约束,业务层次:从业务本身而言数据无误。这里了解一下就好,后面会有解释的

  • 数据在逻辑和物理上都独立于数据库的应用。

    无论是用户更改数据库的逻辑设计,还是数据库软件供应商更改数据库的物理实现,都不会对建立在该数据库上的应用程序带来不利影响。简单来说就是不关我们的事

  • 确保数据一致性(data consistency)和准确性(accuracy)。

  • 简便的数据检索(data retrieval)。

后关系模型

新型的数据库模型:面向对象(object-oriented)数据库和对象关系(object-relational)数据库。知道就好,我也不知道这俩货是什么,以后用到再说。

第2章 设计目标

有目标和诱惑才能更好的学习嘛

学习优秀设计方法学的益处

  • 提供设计健全数据库所需的技能。
  • 提供一些列组织有序的技术引导你逐步完成设计过程。
  • 帮助你将失误和设计重复降至最低。
  • 让设计过程变得更为简单,并减少设计数据库所花时间。
  • 帮助你更充分,更高效的理解和使用RDBMS(Relational Database Manager System)应用程序。(这里我插一句,一般的RDBMS应用程序其实就是自动生成sql语句,但是不能保证生成的sql语句正确,所以最好能自己手写原生sql语句)

优秀的设计目标

  • 数据库应支持设定的和即时的信息检索。(这里我插一句,设定的查询:视图)
  • 正确且高效的构建表。
  • 数据完整性落实到字段、表和关系层次。
  • 数据库支持与组织相关的业务规则。
  • 数据库适应未来发展。

优秀设计的好处

  • 数据库结构易于修改和维护。
  • 数据易于修改。
  • 信息易于检索。
  • 终端用户易于开发和创建。

数据库设计方法

  1. 需求分析(requirements analysis)
  2. 数据建模(data modeling)
  3. 规范化(Normalization)

第3章 术语

终于到了重点部分了,为了以后的讲解以及阅读、浏览数据库相关的文章与网站,本章一定要hold住。

本章中定义了四种类型的术语:关于值的术语(value-related)、关于结构的术语(structure-related)、关于关系的术语(relationship-related)、关于完整性的术语(integrity-related)。


关于值的术语

数据

data,说人话就是存储在表中的数据。

信息

执行sql语句后展现的结果。注意区分数据与信息的区别:

储存的是数据,检索的是信息

空值 null

null,注意不要一时脑抽把null和0、空字符串理解成一样的玩意,这里讲一个null在数学计算中的问题:

带有null的计算结果均为null


关于结构的术语

“查谁裱”了,哈哈哈,玩一个老梗。关系型数据库中的所有数据都存储在关系中,用户视之为。每种关系由记录(在数学理论中叫元组),和字段(在数学理论中叫属性)。
其中表可以代表一个对象 或者 事件

  • 代表对象的表,拿人举例子,字段有height、sex、firstName、lastName等
  • 代表事件的表,拿预约医生举例子,字段有PatientID、Visit Date、Visit Time、Doctor Name等。

这里再按照表的作用分一下类

一个存储数据以提供信息的表称为数据表(data table),该类表中的数据是经常被修改的,结合下面的表类型就很好理解了。

验证表(validation table),也称为查找表(lookup table)存储专门用于实现数据完整性的数据。举个例子就能理解了,例如一个存储了中国全部省份的表就叫 查找表,因为其中的数据不是经常修改的,相反是经常被拿来读取的。

字段

field,用过数据库的都知道,这里就不解释了。

设计不当的数据库中就会存在下面3中类型的字段:

上面这样讲可能太空泛了,这里直接看一个表的例子就容易理解了。

Client Full NameClient City,CityIDParent Name
Susan BlackSeattle,WA 98125John
Marvin RussoSeattle,WA 98125John,Sandi
KiraOlympia,WA 98504Fisrt

第一个Client Full Name就是计算字段,Client City,CityID就是复合字段,Parent Name就是 多值字段。

记录

就是存储在表中的数据。

视图

将查询过程存储起来,下次直接调用视图就可以执行跟上次一样的查询了,所以!视图存储的不是一个查询结果,而是查询过程,直观一点就是你的sql语句。使用视图的一个好处是调用视图时,表结构、字段类型等对与用户来说是不可见的,所以避免了用户直接操作数据库。

主键(primary key)和外键 (foreign key),使用过数据库的人可能很好理解这两货的含义,但是防止自己以后忘记,这里记一下外键 的含义,外键 其实是另一张表中的主键,但是被移动到了另一张表中,对于该表,此主键 是外来的,所以称为外键

索引

曾今很纠结于索引 的区别,其实这样理解索引比较恰当,如果把数据库必做一本书的话,那么就是其中的每一部分的标题,而索引 就是书签,索引中的内容就是的内容,这样人们根据此书签快速查询到数据,而不需要一页一页的去查找书中的标题,直到查找到自己的标题。


关于关系的术语

两张表之间有的采用主、外键联系在一起,有的则是靠第三张表联系表(linking table),也叫做关联表(associate table)联系在一起。具体例子下面会有的。

关系是关系数据库的重要组成部分。

  • 关系让你能够创建多表视图。
  • 对于数据完整性来说,关系非常关键,因为它有助于减少冗余数据和消除重复数据。

接下来使用3种方式描述关系的特征:

  1. 表之间存在的关系类型
  2. 每个表的参与方式
  3. 每个表的参与度
表之间存在的关系类型

注意,接下来讨论的字段都是主键和外键。

  • 一对一,即一个主键记录只与一个外键记录想匹配,如下表
CityIDCity Name
1NingBO
2HangZhou


NameCityIDBlood
TT1A
YY2B

其中第二张表的CityID就是外键,而CityID与Name主键之间是一对一的,因为一个人同一时刻只能出现在一个地方。

  • 一对多,与上面类似的答案,一个主键对应多个外键,如个人信息表中的喜欢的食物 外键字段,就可以是一对多的关系,一个人可以同时喜欢很多食物。这个时候和上面的一对多比较一下就可以知道,都是将一张表中的主键内嵌到另一张表中作为一一个字段的,这也就是外键的由来,记住这一点,下面讨论 多对多时要用到。

  • 多对多,这个很重要,所以重点讲解!

如果第一个表中的单个记录可以与第二个表中的多个记录相关联,且第二个表中的单个记录可以与第一个表中的多个记录相关联,这两表之间的关系就被称为多对多关系。使用联系表可以建立器这种关系。这样讲很空泛,我们来看下面这个例子:

StudentIDStudent Name
1TT
2YY


ClassIDClass Name
1Math
2Chinese

这两张表可以使用上面的方式将另一张表的主键插入到自己表中作为外键的形式来存储数据吗?答案是的,但是这样会造成严重的数据冗余,我们来试一下:

StudentIDStudent NameTelephoneAddressClassID
1TT120Hospital1
1TT120Hospital2
1TT120Hospital3
2YY110kotwalle1
2YY110kotwalle4
2YY110kotwalle7


ClassIDClass NameClass RoomStudentID
1MathNA1101
1MathNA1102
1MathNA1103
1MathNA1104
2PhysicalNB1101
2PhysicalNB1102
2PhysicalNB1103

可以很明显的看出数据冗余了,拿TT来举例子,他因为要同时上ClassID为1.2.3的课,结果他的记录就多了3条,而且可以看到Student Name、Telephone、Address字段都是重复的,这就是数据冗余了,也有人说那我可以把ClassID字段作为字符串来存储啊,存储成‘1,2,3’的形式,不是一样可以读吗?这样想的人可以去看一下这里多值字段,然后喝杯咖啡,休息一下再来看接下来的内容。

所以最好的办法就是使用我们前面介绍的关联表,具体实施请看下面:

StudentIDStudent NameTelephoneAddress
1TT120Hospital
2YY110kotwale

再来课程表

ClassIDClass NameClass Room
1MathNA110
2physicalNB110

接下来就是见证奇迹的时刻了。

StudentIDClassID
11
12
13
21
24
27

第三张表就是关联表,他将ClassID和StudentID之间的多对多关系整合到了一张表中,最大程度的减少了数据的冗余。

每个表参与的方式
  • 强制的(mandatory)
  • 可选的(optional)
  • 如果在向TABLE_B输入记录之前,必须向TABLE_A输入至少一条记录,那么TABLE_A的参与就被视为强制

  • 如果在向TABLE_B输入记录之前,无须向TABLE_A输入任何记录,那么TABLE_A的参与就是可选的。

很容易理解,至于为什么要这样,在相应的业务需求下就很容易理解了,这里记住就好了。

参与度

通过找出TABLE_B可以与TABLE_A中单个记录像关联的最多:max记录数和最少:min记录数,就可以确定TABLE_B的参与度了。

表示成TABLE_B的参与度为–min,max,注意,中间用逗号隔开。


关于完整性的术语

字段说明

字段说明(field specification,其传统叫法为[domain]),描述一个字段的所有元素。每个字段说明包含三种元素:一般元素(general element)、物理元素(physical element)和逻辑元素(logical element)。

  • 一般元素组成字段最基本的信息,包括字段名称(field name)、描述(description)和父表(parent table)等选项。

  • 物理元素决定字段建构方式以及向使用者呈现它的方式。这个范畴包括数据类型(data type)、长度(length)以及显示格式(display format)等等。

  • 逻辑元素描述存储在字段中的值,它包括所需值(required value)、值的范围(range of value)以及默认值(default value)等等。

这里了解就好,鬼知道这玩意什么意思。

数据完整性

数据完整性(data integrity)指的是数据的有效性、一致性和准确性。

在数据库设计过程中,要实现四种类型的数据完整性。

1.表层次完整性(table-level integrity,传统上称作实体完整性)确保表中无重复记录,并且确保表中字段对每个记录的标识是唯一的且不是空值。

2.字段级完整性(field-level integrity,传统上称作“”域完整性**)确保每个字段的结构健全,确保每个字段的值有效、一致性且准确,确保相同类型的字段在真个数据库中定义一致。

3.关系层次完整性(relationship-level integrity,传统上称作参照完整性),确保两表之间的关系是健全的,且无论哪个表中输入、更新或删除数据,两表中的数据始终保持同步。

4.业务规则就是基于切实的业务流程设计相应的数据库了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值