2.1CAP数据库
(Customer Agents products)三个表格组成的数据库例子:
再加上三者之间关心下形成的表格Order(订单)
关系规则:
规则1:
第一范式:
在定义的表格当中关系模型坚持不允许还有多值属性(有时候称为为重复字段)和含有内部结构 (比如记录结构)的列,遵守这样的规则的表称为第一范式
如上图所示表格的最后一列存在多值,所以这个表格是不满足第一范式的。比较好的解决办法是把最后一列建立表格使用外键的方式与原来的表格建立联系 。
第一范式同时要求任何列的值必须是简单类型的,不可以包含内部结构
规则2:
只能基于内容存取行规则,即:我们只能通过每一行中所存在的属性值来检索列。
简单来说在数据表中,认为所有的行是没有顺序的,但是可以取而代之的是通过比如主键的方式取行,例如: 选取行: where cid = ‘c101’; 通过列 cid的属性值选取特定的行。
在对象——关系数据库中,允许某一行的某一列直接对准某一行,这在关系模型中是不允许的。
2.3 行唯一性规则
要求同一个表格中不允许有两行记录(元组)在同一个时刻是完全相同的。
反应的数学思想:关系是元组的集合,集合不可以包含相同的元组。
2.4键、超键(主键)和空值
超键:表示任意两行记录在某个列集合上都有唯一的值,那么次列集合就是此数
据表格的超键
超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键
候选键(candidate key):不含有多余属性的超键称为候选键
主键(primary key):用户选作元组标识的一个候选键程序主键
参考:https://www.cnblogs.com/zhoading/p/10933725.html
但是值得注意的是,就素表格内部的某一列是不包含相同数值的,比如:name ,虽然在某一时刻不包含相同的数据,但是依然不可以作为表格的超键,因为:在表格设计之初并没有想依靠此列作为不同记录的标识,而且在状态改变之后,是无法保证name唯一的,因此无法作为超键。每个表格中至少必有一个键
为什么需要使用单一的 id 的列来标识不同的行记录
1.首先是如果采用记录本身的某项属性,例如 : 商品的名称,在以后的使用过程当中,无法保证是否会出现相同的名称的商品,会影响到以后的使用。
2.其次,在多个表格存在外键联系的时候,比如表格Student 的主键要作为Score表格的外键,Student如果使用(class + name)的主键方式,然后作为Score的外键会比只是用pid做主键在设计上逻辑复杂。
空值:在数据库中被定义为未知的或者是尚未定义的。
实体完整性规则:表格中的任何主键列的取值不可以为空值。
关系代数
关系代数的基本运算:
并、交、差、乘积(笛卡尔积) 、投影、选择、连接、相除
其中前四个是集合运算,后四个是自然关系运算
2.6集合运算
兼容表:
如果表R和S有相同的标题( Head ( R ) = Head ( S ) ),而且属性值是从相同的域中选择出来的,并且相同的属性名称对应相同的含义,那么就可以说这两个表格是 兼容的。只有两个表格是兼容表的时候,二者才可以进行并、交、差 的计算。
R 并 S 形成的表格由属于S或者R或者是属于二者的所有行组成。
R 交 S 形成的表格由二者的都拥有的行组成。
R与S的差(R - S)形成的表格 由属于R但不属于S的行组成。同理 S与R(S - R)的差形成的表格 由属于S但不属于R的行组成
乘积形成的表格T中的每一行 t 都是R表格中的行 u 和S表格中的行 v二者的串接,记作:t = u || s。
2.7自然关系运算
2.7.1 投影
可以理解为: 在查看表格时,为了不选择出用不到的列,只选择自己需要的某些列,不限制行的选择。但是在使用投影之后,筛选出的行数不会多余原本表格的行数,因为在删除某些列之后,某些行会变成相同的,在投影时,会删除相同的行。例如:
从表格customer 中选择 cname 列,就算做是投影。
2.7.2 选择
选择计算,可以理解为: 查询过程中 对表格中的行记录进行限制,挑选出满足条件的行记录。例如:
S where C;
其中C就是选择条件。当包含多个条件时:使用 连接符连接多个关系之间的联系:
AND ,表示连接的关系必须都满足;(C AND D)
OR, 表示这两个关系只要有一个满足的就可以(C OR D);
NOT ,是单目运算符,表示否定,NOT C 表示选择不满足C条件的行记录 ;
2.7.3 关系运算符的优先级
2.7.4 连接
简单理解为:两个表格中存在相同的属性字段,在进行连接运算的时候让二者相等。如:从成绩、学生表格中选择学生的成绩和姓名:
select sname,grade from student,score where student.sid = score.sid;
Student 和 Score 二者有相同的属性字段sid,就可以使用此字段完成表格的连接运算;
连接属性
表格中使用进行连接的属性(参见书上) 。
要注意的是,并不是所有的行都是可以连接的,有些行的连接属性在另一个表中找不到,那么本行数据就无法完成连接运算,在新组成的表格中就不会存在。如歌两个表格不存在相同的属性做连接运算。那么两个表格连接相当于二者做笛卡尔积。
乘法和连接满足交换律: