通过将表分为多个表,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关系。
因此,上述关系具有有损分解。