DBMS 中的无损分解和有损分解
dbmsdatabasemysql
DBMS 中的分解通过将表分成多个表来消除数据库中的冗余、异常和不一致性。
以下是类型 −
无损分解
如果可以使用连接从分解表中重建关系 R,则分解是无损的。这是首选。分解时,关系中的信息不会丢失。连接将产生相同的原始关系。
让我们看一个例子 −
<EmpInfo>
Emp_ID | Emp_Name | Emp_Age | Emp_Location | Dept_ID | Dept_Name |
E001 | Jacob | 29 | Alabama | Dpt1 | Operations |
E002 | Henry | 32 | Alabama | Dpt2 | HR |
E003 | Tom | 22 | Texas | Dpt3 | Finance |
将上表分解为两个表:
<EmpDetails>
Emp_ID | Emp_Name | Emp_Age | Emp_Location |
E001 | Jacob | 29 | Alabama |
E002 | Henry | 32 | Alabama |
E003 | Tom | 22 | Texas |
<DeptDetails>
Dept_ID | Emp_ID | Dept_Name |
Dpt1 | E001 | Operations |
Dpt2 | E002 | HR |
Dpt3 | E003 | Finance |
现在,自然连接应用于上述两个表 −
结果将是 −
Emp_ID | Emp_Name | Emp_Age | Emp_Location | Dept_ID | Dept_Name |
E001 | Jacob | 29 | Alabama | Dpt1 | Operations |
E002 | Henry | 32 | Alabama | Dpt2 | HR |
E003 | Tom | 22 | Texas | Dpt3 | Finance |
因此,上述关系具有无损分解,即没有信息丢失。
有损分解
顾名思义,当关系分解为两个或多个关系模式时,在检索原始关系时不可避免地会丢失信息。
让我们看一个例子 -
<EmpInfo>
Emp_ID | Emp_Name | Emp_Age | Emp_Location | Dept_ID | Dept_Name |
E001 | Jacob | 29 | Alabama | Dpt1 | Operations |
E002 | Henry | 32 | Alabama | Dpt2 | HR |
E003 | Tom | 22 | Texas | Dpt3 | Finance |
将上表分解为两个表 −
<EmpDetails>
Emp_ID | Emp_Name | Emp_Age | Emp_Location |
E001 | Jacob | 29 | Alabama |
E002 | Henry | 32 | Alabama |
E003 | Tom | 22 | Texas |
<DeptDetails>
Dept_ID | Dept_Name |
Dpt1 | Operations |
Dpt2 | HR |
Dpt3 | Finance |
现在,您将无法连接上述表格,因为 Emp_ID 不是 DeptDetails 关系的一部分。
因此,上述关系具有有损分解。