通过将表分为多个表,DBMS中的分解可以消除数据库中的冗余,异常和不一致。
以下是类型-
如果可以使用Joins从分解后的表中重建关系R,则分解是无损的。这是首选。分解后,信息不会因关系而丢失。联接将导致相同的原始关系。
让我们看一个例子-
<EmpInfo>
Emp_ID | Emp_Name | Emp_Age | Emp_Location | Dept_ID | 部门名称 |
E001 | 雅各布 | 29 | 阿拉巴马州 | Dpt1 | 运作方式 |
E002 | 亨利 | 32 | 阿拉巴马州 | DPT2 | 人力资源 |
E003 | 汤姆 | 22 | 德州 | Dpt3 | 金融 |
将上表分解为两个表:
<EmpDetails>
Emp_ID | Emp_Name | Emp_Age | Emp_Location |
E001 | 雅各布 | 29 | 阿拉巴马州 |
E002 | 亨利 | 32 | 阿拉巴马州 |
E003 | 汤姆 | 22 | 德州 |
<DeptDetails>
Dept_ID | Emp_ID | 部门名称 |
Dpt1 | E001 | 运作方式 |
DPT2 | E002 | 人力资源 |
Dpt3 | E003 | 金融 |
现在,自然联接应用于以上两个表-
结果将是-
Emp_ID | Emp_Name | Emp_Age | Emp_Location | Dept_ID | 部门名称 |
E001 | 雅各布 | 29 | 阿拉巴马州 | Dpt1 | 运作方式 |
E002 | 亨利 | 32 | 阿拉巴马州 | DPT2 | 人力资源 |
E003 | 汤姆 | 22 | 德州 | Dpt3 | 金融 |
因此,上述关系具有无损分解,即没有信息丢失。
顾名思义,当一个关系分解为两个或多个关系模式时,在检索原始关系时信息的丢失是不可避免的。
让我们看一个例子-
<EmpInfo>
Emp_ID | Emp_Name | Emp_Age | Emp_Location | Dept_ID | 部门名称 |
E001 | 雅各布 | 29 | 阿拉巴马州 | Dpt1 | 运作方式 |
E002 | 亨利 | 32 | 阿拉巴马州 | DPT2 | 人力资源 |
E003 | 汤姆 | 22 | 德州 | Dpt3 | 金融 |
将上表分解为两个表-
<EmpDetails>
Emp_ID | Emp_Name | Emp_Age | Emp_Location |
E001 | 雅各布 | 29 | 阿拉巴马州 |
E002 | 亨利 | 32 | 阿拉巴马州 |
E003 | 汤姆 | 22 | 德州 |
<DeptDetails>
Dept_ID | 部门名称 |
Dpt1 | 运作方式 |
DPT2 | 人力资源 |
Dpt3 | 金融 |
现在,你将无法参加上表中,因为EMP_ID 不是的一部分DeptDetails关系。
因此,上述关系具有有损分解。