从 r 1 r_1 r1关系的 A A A属性(集)到 r 2 r_2 r2关系的主码 B B B的外码约束(foreign-key constraint) 表明:在任何数据库实例中, r 1 r_1 r1中每个元组对 A A A的取值也必须是 r 2 r_2 r2中某个元组对 B B B的取值。 A A A属性集被称为从 r 1 r_1 r1引用 r 2 r_2 r2的外码(foreign key) 。 r 1 r_1 r1关系也被称为此外码约束的引用关系(referencing relation) ,且 r 2 r_2 r2被称为被引用关系(referenced relation) 。
insert into 起手,后面是value接括号,默认按列序次,要修改的话就要在表名后面加括号表示第几个在哪一列
还可以直接将select的效果insert进需要的地方
更新
update p set q where r表示在p表内满足调节r的全部举行q更新
第4章 中级SQL
连接范例
自然连接(natural join) 运算作用于两个关系,并产生一个关系作为效果。具体来说,select name,course_id from student,takes where student.ID=takes.ID;等价于select name,course_id from student natural join takes;。
选择 σ σ σ 运算选出满足给定谓词的元组,如 σ d e p t n a m e = " P h y s i c s " ( i n s t r u c t o r ) σ_{dept_name="hysics"}(instructor) σdeptname="hysics"(instructor)表示在instructor表中选择dept_name为Physics的元组。
投影 Π \Pi Π 运算是一种一元运算,返回它的参数关系,但滤掉了特定的属性,如 Π I D , n a m e , s a l a r y ( i n s t r u c t o r ) \Pi_{ID,name,salary}(instructor) ΠID,name,salary(instructor)就会列出instructor表中的全部元组但不体现dept_name列。
笛卡尔积 × × × 允许我们结合来自恣意两个关系的信息。
连接 ⋈ ⋈ ⋈ 运算使我们能够将选择与笛卡尔积归并到单个运算中, σ i n s t r u c t o r , I D = t e a c h e s . I D ( i n s t r u c t o r × t e a c h e s ) σ_{instructor,ID=teaches.ID}(instructor×teaches) σinstructor,ID=teaches.ID(instructor×teaches)可以等价地写为 i n s t r u c t o r ⋈ i n s t r u c t o r , I D = t e a c h e s . I D t e a c h e s instructor ⋈_{instructor,ID=teaches.ID} teaches instructor⋈instructor,ID=teaches.IDteaches。
阿姆斯特朗公理是有效的,因为它们不会产生任何不精确的函数依靠。这些规则是完备的,因为对于一个给定的函数依靠集 F F F,它们能允许我们产生全部 F + F^{+} F+。
函数决定的:如果 α → B α\rightarrow B α→B,我们就称属性 B B B被 α α α函数决定。
无关属性的形式化定义如下:考虑一个函数依靠集 F F F以及 F F F中的函数依靠 α → β α\rightarrow β α→β。
从左侧移除:如果 A ∈ α A∈α A∈α而且 F F F逻辑蕴含 ( F − { α → β } ) ∪ { ( α − A ) → β } (F-\{α\rightarrow β\})∪\{(α-A)\rightarrow β\} (F−{α→β})∪{(α−A)→β},则属性 A A A在 α α α中是无关的。
从右侧移除:如果 A ∈ β A∈β A∈β而且函数依靠集 ( F − { α → β } ) ∪ { α → ( β − A ) } (F-\{α\rightarrow β\})∪\{α\rightarrow (β-A)\} (F−{α→β})∪{α→(β−A)}逻辑蕴涵 F F F,则属性 A A A在 β β β中是无关的。
F F F的正则覆盖 F c F_c Fc是如许的一个依靠集: F F F逻辑蕴含 F c F_c Fc中的全部依靠,而且 F c F_c Fc逻辑蕴含 F F F中的全部依靠。此外, F c F_c Fc必须具备如下性质:
F c F_c Fc中任何函数依靠都不包含无关属性。
F c F_c Fc中每个函数依靠的左侧都是唯一地。也就是说,在 F c F_c Fc中不存在两个依靠 α 1 → β 1 α_1\rightarrow β_1 α1→β1和 α 2 → β 2 α_2\rightarrow β_2 α2→β2,满足 α 1 = α 2 α_1=α_2 α1=α2。
F F F对 R i R_i Ri的限定意味着在关系 R i R_i Ri(即某个表)上应用约束 F F F。
保持依靠的分解:具有性质 F ′ + = F + F^{'+}=F^{+} F′+=F+的分解。
Boyce-Codd范式(BCNF) :关系模式 R ∈ 1 N F R∈1NF R∈1NF。若函数依靠集合F中的全部函数依靠 X → Y X\rightarrow Y X→Y( Y Y Y不包含于 X X X)的左部都包含R的任一候选键,则 R ∈ B C N F R∈BCNF R∈BCNF。换言之,BCNF中的全部依靠的左部都必须包含候选键。
嵌入的多值依靠指函数依靠 X → → Y X→→Y X→→Y在模式R上不建立,但是在 R R R的子模式 W W W上建立,则称 X → → Y X→→Y X→→Y为 R R R上的嵌入型多值依靠。
第四范式(4NF) 要求关系模式中的每个非平凡多值依靠必须满足以下条件:如果关系模式R的每个非平凡多值依靠 X → → Y ( Y ⊆ X ) X→→Y(Y ⊆ X) X→→Y(Y⊆X),其中X必须包含候选码。如果关系模式满足4NF,则它也必然满足BCNF。
D D D对 R i R_i Ri的限定是集合 D i D_i Di,它包含:
D + D^{+} D+中只含 R i R_i Ri中属性的全部函数依靠。
全部形如 α → → β ∩ R i α\rightarrow \rightarrow β∩R_i α→→β∩Ri的多值依靠,其中 α ⊆ R i α⊆ R_i α⊆Ri且 α → → β α\rightarrow \rightarrow β α→→β属于 D + D^+ D+。
更多的范式(仅提一下名字) :投影-连接范式、连接依靠、第五范式、域-码范式、第二范式。
原子域要求域的元素被认为是不可再分的单位。
第一范式(1NF) 要求关系模式的全部属性的域都是原子的。
唯一角色假设是数据库设计的一个盼望的特性,意味着每个属性名在数据库中只有唯一的含义。
去规范化指把一个规范化的模式变成非规范化的过程。
交叉表指一个属性的每一个值作为一列的表示方法。
时态数据是具有关联的时间区间的数据,时间区间内的数据是有效(valid) 的。
快照用来表示特定时刻的数据值。
时态函数依靠 α → τ β α\stackrel{\tau}{\rightarrow}β α→τβ在关系模式 r ( R ) r(R) r(R)上建立的条件是:对于 r ( R ) r(R) r(R)的全部合法实例, r r r的全部快照都满足函数依靠 α → β α\rightarrow β α→β。
时态主码 r . A r.A r.A建立要求,只要 r r r中的两个元组 t 1 t_1 t1和 t 2 t_2 t2使得 t 1 . A = t 2 . A t_1.A=t_2.A t1.A=t2.A,它们的有效时间区间 t 1 t_1 t1和 t 2 t_2 t2必然不会重叠。
形式化地,从 r . A r.A r.A到 s . B s.B s.B的时态外码约束确保了一下内容:对于 r r r中具有有效时间 ( l , u ) (l,u) (l,u)的每个元祖 t t t,在 s s s中存在一个或多个元组构成的一个子集 s t s_t st,使得每个元祖 s i ∈ s t s_i∈s_t si∈st都有 s i . B = t . A s_i.B=t.A si.B=t.A,而且包管全部 s i s_i si的时间区间的并集包含 ( l , u ) (l,u) (l,u)。