DBMS中的无损和有损分解

通过将表分为多个表,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关系。

因此,上述关系具有有损分解。