数据模型
描述现实世界实体,实体间联系以及数据语义和一致性约束的模型。这个定义看起来没什么实际用途,但是理解了对使用power designer设计数据库有好处。嘛。。。反正我没理解透。
按照模型应用的不同目的,可以分为
- 概念数据模型(概念模型):按用户的观点对数据进行建模,强调语义表达功能。主要用于数据库的概念设计。
- 结构数据模型(数据模型):按计算机系统的观点对数据进行建模,直接面向数据库的逻辑结构。
现实世界——>信息世界 概念模型(如E-R模型,即实体-联系模型)——>机器世界 数据模型
数据模型的三要素
- 数据结构:实体之间的联系
- 数据操作:检索和更新的实现
- 数据的完整性约束:数据之间的联系具有的制约和依赖关系
关系模型
形式化定义
R(U,D,dom,F)
R为关系模式名,U是属性集,D是U中属性的值所来自的值域,Dom是属性向域的映射集合,F是属性间的依赖关系。可以简写为
R(U)
重要概念
超码(Super Key)
唯一标识一个元组的属性集
候选码(Candidate Key)
不含多余属性的超码。包含在任何一个候选码的属性成为主属性(Primary Attribute),否则称为非主属性。
主码(Primary Key)
用户选作元组标识的一个候选码称为主码,其余的候选码称为替换码(Alternate Key)。
外码(Foreign Key)
关系模式R的外码是它的一个属性集FK,满足:
- 存在带有候选码CK的关系模式S
- R的任一非空FK值在S的CK中有一个相同的值
S称为被参照关系,R称为参照关系。
总之就是说,我的属性里用到你的已经有的属性,并且那个属性被你用来当作候选码。比如银行系统里面,如果bank表有属性name,staff表里面有属性bank_name,并且bank_name的实例来自name已经有的实例,就说bank_name是外键,引用bank的name属性。
被引用了的表不能够直接删除(参照完整性)。比如bank里面有中国银行,staff里面有小明,来自中国银行。如果直接把bank删除,那么小明来自的中国银行就无从查找来自何处。有些数据库系统提供删除的级联操作,就是说,删除bank表的同时,把其他表中所有引用了它的实例都删除掉,mysql提供这种操作,不过需要解除外键检查。
SET FOREING_KEY_CHECKS=0
oracle就不支持级联删除。官方给出的解释是:这是没有意义的操作。想要删除的话,需要先删掉相应的外键约束,删除之后再加上外键约束。
三类完整性规则
- 实体完整性(Entity Integrity):主码的所有属性不可为空
- 参照完整性(Referential Integrity):参照关系R的任意一个外码值必须来自于参照关系S中所参照的候选码的某个值,或者为空。
- 用户自定义完整性(User-Defined Integrity):针对某一数据的约束条件,比如成绩取值0到100,或者性别不能为空啥的。
关系代数
并
返回两个关系中所有元组
交
返回两个关系共同的元组
差
返回属于第一个关系但不属于第二个关系的元组
笛卡尔积
返回两个关系的元组的任意组合所得到的元组集合
选择
返回指定关系中满足给定条件的元组
投影
返回指定关系中去掉若干属性后所得的元组
联接
从两个关系的笛卡尔积中选区属性间满足给定条件的元组
- 自然联接:相当于在R×S中选取R和S的所有公共属性值都相等的元组,并在结果中去掉重复属性
- θ联接:相当于在R×S中选取R的属性A值与S的属性B值满足比较关系θ的元组。
- 等值联接:θ关系为相等的时候,即为等值联接。比较的属性是两个公共属性时,为自然联接。
除
除的结果与第二个关系的笛卡尔积包含在第一个关系中
(气死我了,这个编辑器竟然不支持latex数学公式的编辑,好多符号打不出来)
附加的关系代数操作
扩展投影(广义投影)
投影列表可以是R的一个或多个属性,或者是重命名得出的属性,或者通过原关系模式多个属性运算得出的新属性。
聚集函数(aggregate)
- SUM(求和)
- COUNT(计数)
- AVG(求均值)
- MAX(求最大值)
- MIN(求最小值)
分组(Group)
排序(sort)
赋值
数据更新
(感觉如果不是需要使用这些理论上的关系代数运算,可以直接看mysql或者oracle等的相关对应操作的解释或教程。菜鸟教程
原文地址:https://www.cnblogs.com/terieqin/p/9210983.html