其实这还是概念(关系数据库)
《数据库学习笔记(一)》中所写,一个数据库的核心是数据模型,往往是什么数据模型就是什么数据库,因此关系数据库的数据模型就是关系模型。作为一种数据模型,关系模型同样具备三要素即:数据结构、数据操纵和数据的完整性约束条件。
关系的数据结构,就是一张张表吗?
是的,就是Table!!!That’s it!!!
高逼格的术语时间
域(Domain),意思完全没有变化上一章都讲两遍了乀(ˉεˉ乀) 。
笛卡尔积(Cartesian Product),是域上面的一种集合运算。直接上个例子吧,设有域D1 = { 男,女}; D2 = { 男,女 };D3 = { 1,2,3 },求D1、D2、D3的笛卡尔积Dall。(D1和D2其实是相等,这样即是说求笛卡尔积的运算时允许相同的域的)
Dall
= D1 x D2 x D3
= {(男,男,1),(男,男,2),(男,男,3),
(男,女,1),(男,女,2),(男,女,3),
(女,男,1),(女,男,2),(女,男,3),
(女,女,1),(女,女,2),(女,女,3)}
(注:笛卡尔积不满足交换律,即(d1,d2)≠(d2,d1))
关系(Relation),是笛卡尔积的有限子集,所以也是一张二维表。表示为R(D1,D2,…,Dn)。
R,为关系名。
n,为关系的度或者叫做目。
属性(Attribute),由于关系是笛卡尔积的一个有限子集,而且笛卡尔积允许存在相同的域,因此为了区分这些相同的域,就必须给关系表的每一列加上一个名字。所以我们称列为属性,对应的列名就叫属性名,每个元组对应属性的分量就是属性值。
候选码(Candidate Key),能够唯一标识元组的一组属性,一个关系中候选码不一定唯一。候选码的诸属性称为主属性(Prime Attribute),其余属性叫非主属性(Non-prime Attribute)或非码属性(Non-key Attribute)。如果一个关系模式的所有属性组成了他的候选码,那么就称为全码(All-key)。
关系模式的数据结构介绍到这就行了吗?肯定不行,太短了……→_→。和实际使用完全没关系啊!!!
就拿MySQL来说,我们随便SELECT一下生成的关系table,其行和列貌似都很随意啊!!!就目前说的这些内容看来和这种随意的特点真是毫无关系……
故,当关系作为关系数据模型的数据结构时,需要给予必要的限定和扩充(书中原话):
①、无限关系在数据库系统中是无意义的。
②、通过属性名取消关系元组的有序性。
③、列的顺序无所谓。
④、任意两个元组的候选码不能相同。
⑤、行的顺序无所谓。
⑥、分量必须取原子值,不可分割。
描述一张表 —— 关系模式
简单说,就像上一章说的实体型,在关系模型中,可以简单的将table中的记录(元组)与前文中概念模型的实体对应,关系模式与实体型对应。
书上的标准形式是R(U,D,DOM,F)。
R,关系名也就是表名。
U,为属性名的集合。
D,为属性组所来自的域(书上都没怎么写,也没准确的例子,略过吧)
DOM,属性向域的映像集合(同D)
F,属性间的依赖关系。
通常简记为R(U),例 学生(学号,姓名)。
更多的关系 —— 关系数据库
所有关系的集合就组成了关系数据库。
玩弄集合 —— 关系操作
没错,进度太慢了,还在学理论……今后的学习绝对不能用国内教材了,国内的教材都喜欢从基础讲起。然而基础这个内容太多了,学着学着就没兴趣了……下一本书就看国外老师的,嗯再看一遍《Programming Pearls》。
基本关系操作
①、查询(Query)
②、插入(Insert)、删除(Delete)、修改(Update)
查询是最主要的部分,查询操作可分为:选择(Select)、投影(Project)、连接(Join)、除(Divide)、并(Union)、差(Except)、交(Intersection)、笛卡尔积。
关系数据语言的分类
①、关系代数语言(例,ISBL)
②、关系演算语言:元祖关系演算语言(例,APLHA、QUEL),域关系演算语言(例,QBE)
③、具有①和②双重特点的语言(例,SQL)
关系代数(关系演算记不住,偷个懒)
选择(Selection):又称限制(Restriction),类似SQL中的WHERE语义,记为σ
投影(Projection):类似SQL中的SELECT语义,记为π
连接(Join):在笛卡尔积中选取满足一定条件的元组,记为⋈。
等值连接,选取属性值相等的元组。
自然连接,在等值连接中去除分量重复的元组。
外连接,把舍弃的元组保留,并在其他属性上用null填充。
左外连接,保留的元组在左边。
右外连接,保留的元组在右边。
除运算(Division):这个挺烦的,看链接吧http://blog.csdn.net/neildemo/article/details/50081895
没有规矩不成方圆 —— 关系的完整性
关系模型的完整性约束有三类:实体完整性、参照完整性、用户定义的完整性。其中实体完整性和参照完整性是关系模型必须满足的,是关系的不变性。用户定义的完整性是用户自己定义的语义约束。
实体完整性(Entity Integrity):主码(主键)不可为空。
参照完整性(Reference Integrity),用定义不如直接上例子。
例: 关系1:Student(学号,姓名),PrimaryKey(学号)
关系2:SC(学号,课程名,成绩),PrimaryKey(学号,课程名)
联系现实世界情况这两个关系之间是有联系的,SC中的某一个元祖的学号属性在Student中必然存在的,即sc.学号 = student.学号,那么SC表中的属性学号即为外码(Foreign Key)。而参照完整性的规则就是针对这个外码,SC.学号 = { null ∪ Strudent.学号 }
用户定义完整性(User-defined Integrity),这就很自由了,比如某公司员工表中,老板可以自己定义一个规则“性别只能是女……(+_+)? ”