数据库相关知识
思维导图
用思维导图,结构化记录本书的核心观点。
1数据库数据模型
1.层次数据模型(Hierarchical Data Model)
紧随网状数据库后出现的是层次数据库,其数据模型是层次数据模型,即使用树结构来描述实体及其之间关系的数据模型。在这种结构中,每一个记录类型都用节点表示,记录类型之间的联系则用节点之间的有向线段来表示。每一个子节点只能有一个父节点,但是每一个父节点可以有多个子节点。这种结构决定了采用层次数据模型作为数据组织方式的层次数据库系统只能处理一对多的实体联系。
2.网状数据模型(Network Data Model)
网状数据库基于网状数据模型建立数据之间的联系,能反映现实世界中信息的关联,是许多空间对象的自然表达形式。
3.关系数据模型(Relational Data Model)
关系数据模型的概念非常简单,结构特别灵活,能满足所有布尔逻辑运算和集合运算规则形成的查询要求; 可以搜索、比较和组合不同类型的数据; 使用关系数据模型进行数据增加和删除操作非常方便,关系数据模型具有较高的数据独立性和更好的安全保密性。然而,当数据库比较大的时候,查找满足特定关系的数据比较耗时,同时也难以描述空间数据关系。
2.数据库及数据仓库模型设计的三个主要步骤
1.概念模型
概念模型就是在了解了用户的需求 , 用户的业务领域工作情况以后 , 经过分析和总结 , 提炼出来的用以描述用户业务需求的一些概念的东西 ; 如销售业务中的 客户 和 定单 , 还有就是 商品 , 业务员 , 用 USE CASE 来描述就是 : 业务员 与 客户 就购买 商品 之事签定下 定单 , 概念模型使用 E-R 图表示 , E-R 图主要是由实体 , 属性和联系三个要素构成的 , 该阶段需完成 :
- 该系统的商业目的是什么 , 要解决何种业务场景
- 该业务场景中 , 有哪些人或组织参与 , 角色分别是什么
- 该业务场景中 , 有哪些物件参与 ,
- 此外需要具备相关行业经验 , 如核心业务流程 , 组织架构 , 行业术语
- 5w1h , who , what , when , where , why, how
2.逻辑模型
逻辑模型是将概念模型转化为具体的数据模型的过程 , 即按照概念结构设计阶段建立的基本 E-R 图 , 按选定的管理系统软件支持的数据模型 (层次/网状/关系/面向对象) , 转换成相应的逻辑模型 , 这种转换要符合关系数据模型的原则 ;
逻辑模型主要包括网状模型、层次模型、关系模型、面向对象模型等,按计算机系统的观点对数据建模,用于DBMS实现
还以销售业务为例 : 客户 信息基本上要包括 : 单位名称 , 联系人 , 联系电话 , 地址等属性
商品 信息基本上要包括 : 名称 , 类型 , 规格 , 单价等属性
定单 信息基本上要包括 : 日期和时间属性 ; 并且 定单 要与 客户 , 业务员 和商品 明细关联 , 该阶段需完成 :
- 分多少个主题 , 每个主题包含的实体
- 每个实体的属性都有什么
- 各个实体之间的关系是什么
- 各个实体间是否有关系约束
3.物理模型
物理模型就是针对上述逻辑模型所说的内容 , 在具体的物理介质上实现出来 , 系统需要建立几个数据表 : 业务员信息表 , 客户信息表 , 商品信息表 , 定单表 ; 系统要包括几个功能 : 业务员信息维护 , 客户信息维护 , 商品信息维护 , 建立销售定单 ; 表 , 视图 , 字段 , 数据类型 , 长度 , 主键 , 外键 , 索引 , 约束 , 是否可为空 , 默认值 , 该阶段需完成 :B+Tree sql
- 类型与长度的定义
- 字段的其他详细定义 , 非空 , 默认值
- 却准详细的定义 , 枚举类型字段 , 各枚举值具体含义
- 约束的定义 , 主键 , 外键
这三个过程 , 就是实现一个数据库设计的三个关键的步骤 , 是一个从抽象到具体的一个不断细化完善的分析 , 设计和开发的过程
3.实体(Entiy)
对人、事抽象化的对象。对应数据库中的表。而表中每一行数据就是实体的实例。
举例
具体分析
1)按照含义:5W1H +How much
2)按照含义分类 IBM
3)按照Pattern分类:
主实体--->强实体;子类型,属性类型、关联类型-->弱实体。
(1)主实体(基本实体):客户,包含属性客户编码、客户地址、客户联系人
(2)子类型实体:潜在客户,不仅包含上面客户的属性,还包含当前机会、购买意向等其他特有属性
(3) 属性类实体:由属性引发的实体,比如客户地址,包含了客户编码、地址类型、地址等属性
(4)关联实体:客户实体和员工实体是通过销售代表分配表关联的
注:数据建模,应实事求是,因地制宜,不可拘泥以上实体分类
4.属性(Attibute)
1.属性对应数据库中表的列
2.属性的分类
1)按内容
2)属性的特性
4)属性的取值
字段类型 | 物理模型 |
---|---|
BLOB | 文件内容 |
BOOLEAN | 布尔值(true/false)(真/假) |
CHAR | 固定长度的字符串 |
DATE | 时间类型 |
DECIMAL | 金额类型 |
DOUBLE | 高精度有小数类型 |
FLOAT | 高精度有小数类型 |
INTERGER | 整数 |
LONG | 大整数 |
NUMERIC | 有小数类型 |
TIME | 时间如:12:12 |
TIMSTAMP | 带时区的时间 |
VCARCHAR | 不定长字符串 |
5.域(Domain)
1)域的定义
属性的所有取值的集合,可以理解成自定义的一种数据类型,并且还能带有约束
2) 域的优点
(1)挺高数据质量;
(2)使数据模型易于理解和便于沟通;
(3)标准化,提高建模效率和模型质
3).域的缺点
一旦修改与就会修改使用域的所有字段,进而可能影响存储性能、表空间的使用等。比如,域中的字段原来是varchar(10),现在有一个字段增长到了varchar(100),然后改成了varchar(100),对应的所有字段都被改成varchar(100),消耗的存储空间会增大,原来分配的表空间也可能不够用了。
6.关系
一对一(1:1) :1对1关系是指对于实体集A与实体集B,A中的每一个实体至多与B中一个实体有关系;反之,在实体集B中的每个实体至多与实体集A中一个实体有关系。
例如:一个用户只能拥有一张身份证,而一张身份证只属于一个用户。所以这就是一对一的关系。一对多(1:n) :1对多关系是指实体集A与实体集B中至少有n(n>0)个实体有关系;并且实体集B中每一个实体至多与实体集A中一个实体有关系。
例如:一对多和多对一是一样的。一个用户拥有多张银行卡,但是一张银行卡只属于一个用户。所以这就是一对多的关系。反过来说法就是多对一。多对多(m:n) :多对多关系是指实体集A中的每一个实体与实体集B中至少有m(m>0)个实体有关系,并且实体集B中的每一个实体与实体集A中的至少n(n>0)个实体有关系。
例如:用户与商品的关系,一个用户可拥有多件商品。同样一件商品可被多个用户所拥有。所以这就是多对多的关系。
7.ER图的绘制
什么是实体关系图(ERD)?
首先,什么是实体关系图?
实体关系图也被称为 ERD、ER 图、实体联系模型、实体联系模式图或 ER 模型,是一种用于数据库设计的结构图。一幅 ERD 包含不同的符号和连接符,用于显示两个重要的資訊:系统范围内的主要实体,以及这些实体之间的相互关系。
这也就是为什么它被称为“实体”“关系”图(ERD)啊!
当我们谈论 ERD 中的实体时,我们经常提到诸如人员/角色(例如学生),有形商业对象(例如产品),无形商业对象(例如日志)等业务对象。“关系”則是这些实体在系统内的相互关联。
在典型的 ER 设计中,可以找到诸如圆角矩形和 (Rounded rectangle) 连接符(具有不同样式的末端)的符号来描述实体,它们的属性和相互关系。
ERD 符号指南
实体
ERD 实体是一个系统内可定义的事物或概念,如人/角色(例如学生),对象(例如发票),概念(例如简介)或事件(例如交易)(注:在 ERD 中,术语“实体”通常用来代替“表”,但它们是一样的)。在考慮实体时,嘗試把它们想成名词。在 ER 模型中,实体显示为圆角矩形,其名称位于上方,其属性列在实体形状的主体中。下面的 ERD 示例显示了 ER 实体的一个用例
实体属性
称为列 (Row),意思是持有它的实体的属性或特性。
一个属性有一个描述属性的名称和一个描述属性种类的类型,例如代表字符串的 varchar,整数的 int。当为物理数据库开发绘制 ERD 时,得使用目标 RDBMS 支持的类型,以確保設計和物理数据库的一致性。
下面的 ER 图示例显示了一個包含属性的实体
主键 (Primary Key)
主键又称 PK,是一种特殊的实体属性,用于界定数据库表中的记录的独特性。一个表不能有两笔(或更多)拥有相同的主键属性值的记录,像是身份证明内的 ID 便是典型的例子,两个人即使性名相同,ID 是不会一样,若身份证明是个表,那ID 便是主键了。下面的 ERD 示例显示了拥有主键属性 “ID” 的实体 “Product”,以及数据库中表记录的预览。第三个记录是无效的,因为 ID 'PDT-0002' 的值已被另一个记录使用。不为空唯一(索引也可以做到,但他不一定是主键)
外键 (Foreign Key)
外键又称外来键和外部键,是其他表对某张表的主键的引用,用于识别实体之间的关系。请注意,有别于主键,外键不必是唯一的,多个记录可以共享相同的值。下面的 ER Diagram 示例显示了一个包含一些列的实体,其中一个外键用于引用另一个实体。
关系
两个实体之间的关系表示这两个实体以某种方式相互关联。例如,学生可能参加课程。实体“学生”因此与“课程”相关,而这关系则在 ER 图中以连接线表达着。
基数 (Cardinality)
基数定义了一个实与另一个实体的关系里面,某方可能出现次数。例如,一个团队有许多球员,若把这关系呈现于 ERD 时,团队和球员之间是一对多的关系。
在 ER 图中,基数表示为连接线端的乌鸦脚。三种常见的主要关系是一对一,一对多和多对多。
一对一的基数的例子
一对一关系主要用于将实体分成两部分,简洁地将资讯呈现,使读者更容易理解。下图显示了一对一关系的示例。
一对多的基数的例子
一对多关系是指两个实体 X 和 Y 之间的关系,其中 X 的一个实例可以链接到Y的许多实例,而 Y 的一个实例仅链接到 X 的一个实例。下图显示了一对多关系的一个例子。
多对多的基数的例子
多对多关系是指两个实体 X 和 Y 之间的关系,其中 X 可以被链接到 Y 的许多实例,反之亦然。下图显示了一个多对多关系的例子。请注意,多对多关系在物理 ERD 中被分成一对一对多的关系,你会在下一节中學到什麼是物理 ERD。
概念模型 vs 逻辑模型 vs 数据模型
ERD功能 | 概念 | 逻辑 | 物理 |
---|---|---|---|
实体(名称) | 是 | 是 | 是 |
关系 | 是 | 是 | 是 |
列 | 是 | 是 | |
列的类型 | 随意 | 是 | |
主键 | 是 | ||
外键 | 是 |