技术文章和资源

技术文章(时间排序)

热门类别

Python PHP MySQL JDBC Linux

DBMS 中的无损分解和有损分解

dbmsdatabasemysql

DBMS 中的分解通过将表分成多个表来消除数据库中的冗余、异常和不一致性。

以下是类型 −

无损分解

如果可以使用连接从分解表中重建关系 R,则分解是无损的。这是首选。分解时,关系中的信息不会丢失。连接将产生相同的原始关系。

让我们看一个例子 −

<EmpInfo>

Emp_IDEmp_NameEmp_AgeEmp_LocationDept_IDDept_Name
E001Jacob29AlabamaDpt1Operations
E002Henry32AlabamaDpt2HR
E003Tom22TexasDpt3Finance

将上表分解为两个表:

<EmpDetails>

Emp_IDEmp_NameEmp_AgeEmp_Location
E001Jacob29Alabama
E002Henry32Alabama
E003Tom22Texas

<DeptDetails>

Dept_IDEmp_IDDept_Name
Dpt1E001Operations
Dpt2E002HR
Dpt3E003Finance

现在,自然连接应用于上述两个表 −

结果将是 −

Emp_IDEmp_NameEmp_AgeEmp_LocationDept_IDDept_Name
E001Jacob29AlabamaDpt1Operations
E002Henry32AlabamaDpt2HR
E003Tom22TexasDpt3Finance

因此,上述关系具有无损分解,即没有信息丢失。

有损分解

顾名思义,当关系分解为两个或多个关系模式时,在检索原始关系时不可避免地会丢失信息。

让我们看一个例子 -

<EmpInfo>

Emp_IDEmp_NameEmp_AgeEmp_LocationDept_IDDept_Name
E001Jacob29AlabamaDpt1Operations
E002Henry32AlabamaDpt2HR
E003Tom22TexasDpt3Finance

将上表分解为两个表 −

<EmpDetails>

Emp_IDEmp_NameEmp_AgeEmp_Location
E001Jacob29Alabama
E002Henry32Alabama
E003Tom22Texas

<DeptDetails>

Dept_IDDept_Name
Dpt1Operations
Dpt2HR
Dpt3Finance

现在,您将无法连接上述表格,因为 Emp_ID  不是 DeptDetails 关系的一部分。

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


相关文章