<p><span style="font-size: 12px;">转自<a href="https://blog.csdn.net/zdplife/article/details/48060461" target="_blank">数据库-关系代数(类型、完整性约束、基本运算、扩展运算)</a></span></p> <h3><span style="font-size: 16px;">(1)基本概念</span></h3> <h4> ① 属性和域:</h4> <p> 每一个事物有不少属性,每一个属性对应的取值范围叫作域,全部对域都是原子数据(第一范式)</p> <h4> ② 相关名词</h4> <p> n元关系:R(D1,D2,D3...Dn)是n元关系,其中关系属性的个数称为“元数”,元组的个数称为“基 数”,也就是记录值。</p> <p> 候选码:若关系中某一个属性或者属性组的值能够惟一的标识一个元组,则称为候选码</p> <p> 主码:能够选择任意一个候选码做为主码</p> <p> 主属性:包含在任何候选码中的属性叫做主属性</p> <p> 全码:关系模型中全部属性都是这个关系模型的候选码,称为全码</p> <p> 外码:关系模式中的属性非该关系的码,则称为外码</p> <h4> ③ 三种类型:</h4> <p> 基本表:实际存在的表</p> <p> 查询表:查询结果对应的表</p> <p> 视图表:由基本表和其余视图表导出的表,不是实际存在数据库中</p> <h4> ④ 完整性约束:</h4> <p> 实体完整性:主属性A不能为空值</p> <p> 参照完整性:用实体之间的关系来描述,若F是关系R的外码,则F或者是空值,或者是某个元组的 主码值</p> <p> 用户定义完整性:根据具体关系数据的约束条件,好比数据范围等</p> <h3>(2)关系五种基本运算</h3> <h4> ① 并:</h4> <p> R,S具备相同的关系模式(元素相同,结构相同),记为R U S,返回由R或者S元组构成的集合组成</p> <h4> ② 差:</h4> <p> R,S具备相同的关系模式(元素相同,结构相同),记为R-S,右属于R但不属于S的元组组成</p> <h4> ③ 广义笛卡尔积:</h4> <p> R×S由n目和m目的关系R,S组成一个(n+m)列的元组集合,若R有K1个元组,S有K2个元组,则R×S有K1*K2个元 组</p> <h4> ④ 投影(π) :</h4> <p> 从关系的垂直方向开始运算,选择关系中的若干列组成新的列。</p> <h4> ⑤ 选择(σ):</h4> <p> 选择从关系的水平方向进行元算,选择知足给定条件的元组组成新的关系。</p> <h3>(3)扩展的关系代数运算</h3> <h4> ① 交:</h4> <p> R∩S=R-(R-S),R,S具备相同的关系模式</p> <h4> ② 连接:</h4> <p> 连接分为θ连接,等值连接和天然连接</p> <p> θ连接:从R,S的笛卡尔积中选择知足必定条件的元组</p> <p> 等值连接:当θ为“=”时为等值连接</p> <p> 天然连接:是一种特殊的等值连接,比较的份量必须是相同的属性组,并在结果集中去掉重复列,若是没有重复列,天然连接就转换为笛卡尔积</p> <h4> ③ 除:</h4> <p> 同时从水平方向和垂直方向进行运算,给定关系R(X,Y)和S(Y,Z),X,Y,Z为属性组,R÷S应当知足在X上的份量值x的像集Yx包含关系S在属性组Y上的投影集合:</p> <p>例如:</p> <p> R是:</p> <table align="center" frame="border" style="margin-left:200px"> <tbody> <tr> <td valign="middle" align="center" style="width: 100px"> A </td> <td valign="middle" align="center" style="width: 100px"> B </td> <td valign="middle" align="center" style="width: 100px"> C </td> <td valign="middle" align="center" style="width: 100px"> D </td> </tr> <tr> <td align="center"> a </td> <td align="center"> b </td> <td align="center"> c </td> <td align="center"> d </td> </tr> <tr> <td align="center"> a </td> <td align="center"> b </td> <td align="center"> e </td> <td align="center"> f </td> </tr> <tr> <td align="center"> a </td> <td align="center"> b </td> <td align="center"> h </td> <td align="center"> k </td> </tr> <tr> <td align="center"> b </td> <td align="center"> d </td> <td align="center"> e </td> <td align="center"> f </td> </tr> <tr> <td align="center"> b </td> <td align="center"> d </td> <td align="center"> d </td> <td align="center"> l </td> </tr> <tr> <td align="center"> c </td> <td align="center"> k </td> <td align="center"> c </td> <td align="center"> d </td> </tr> <tr> <td align="center"> c </td> <td align="center"> k </td> <td align="center"> e </td> <td align="center"> f </td> </tr> </tbody> </table> <p> S是: </p> <table align="center" style="width: 97px; height: 118px;margin-left:250px" frame="border"> <tbody> <tr> <td valign="middle" align="center" style="width: 100px"> C </td> <td valign="middle" align="center" style="width: 100px"> D </td> </tr> <tr> <td align="center"> c </td> <td align="center"> d </td> </tr> <tr> <td align="center"> e </td> <td align="center"> f </td> </tr> </tbody> </table> <p> 则R÷S: </p> <table align="center" style="width: 99px; height: 118px;margin-left:250px" frame="border"> <tbody> <tr> <td valign="middle" align="center" style="width: 100px"> A </td> <td valign="middle" align="center" style="width: 100px"> B </td> </tr> <tr> <td align="center"> a </td> <td align="center"> b </td> </tr> <tr> <td align="center"> c </td> <td align="center"> k </td> </tr> </tbody> </table> <h4> ④ 广义投影:</h4> <p> 广义投影运算允许在投影列表中使用算法运算,实现对投影运算的扩充,投影出的列不必定是原来的列,能够是经过计算出来的列。</p> <h4> ⑤ 外链接:</h4> <p> 因为天然连接会丢失一些信息,而外连接能够处理因为连接运算而缺失的信息,外连接分为左外连接、右外连接、全外连接。</p> <p> 左外连接:取出左侧关系中全部与右侧关系中任一元素都不匹配的元组,用null来填充右侧的关系 属性。</p> <p> 右外连接:取出右侧关系中全部与右侧关系中任一元素都不匹配的元组,用null来填充左侧的关系属性。</p> <p> 全外连接:完成左外连接和右外连接的操做。</p>算法