在 DDBMS 的上下文中, Vertical Fragmentation和Horizontal Fragmentation有什么区别?
是不是关系的外延是纵向的碎片化,内涵的碎片化是横向的碎片化?
在 DDBMS 的上下文中, Vertical Fragmentation和Horizontal Fragmentation有什么区别?
是不是关系的外延是纵向的碎片化,内涵的碎片化是横向的碎片化?
假设你有一个亲戚,学生。
您将关系 Student 分成两组(称为 set1 和 set2),这样 Student 的一半属性在 set1 中,而其中一半在 set2 中。这称为“垂直碎片”,因为关系沿列分散(类似于垂直撕裂页面)。原始关系是通过所有集合的自然连接获得的。对于自然连接,我们需要至少一个所有集合共有的属性(通常是主键)。
但是,如果我们的关系划分为 site1 存在行的子集(参见此处,所有属性都存在于行中)(例如),另一个子集存在于 site2,依此类推,这称为“水平碎片”,并且原始关系是通过对所有集合进行并集得到的。这就像水平撕裂一页。
很明显,这是在分布式 DBMS 的上下文中。
假设我们有这种关系
customer_id | Name | Area | Payment Type | Sex
1 | Bob | London | Credit card | Male
2 | Mike | Manchester | Cash | Male
3 | Ruby | London | Cash | Female
片段 1
customer_id | Name | Area | Payment Type | Sex
1 | Bob | London | Credit card | Male
2 | Mike | Manchester | Cash | Male
片段 2
customer_id | Name | Area | Payment Type | Sex
3 | Ruby | London | Cash | Female
片段 1
customer_id | Name | Area | Sex
1 | Bob | London | Male
2 | Mike | Manchester | Male
3 | Ruby | London Female
片段 2
customer_id | Payment Type
1 | Credit card
2 | Cash
3 | Cash
只有分布式数据库才需要垂直分片。假设关系 R 之一有几个属性。其中一些属性存在于 R1 中,其他属性存在于 R2 中。然后我们垂直加入页面。这称为垂直碎片。
数据碎片是分布式数据库管理系统 (DDBMS) 的一个重要特性 水平碎片是将表水平拆分为元组或行。例如,一个有 1000 条记录的 COMPANY 表可以水平分成十个片段,每个片段有 100 条唯一记录。
Vertical Fragmentation是将表分割成称为集合或站点的列,其中每个站点必须至少有一个共同的列,例如主键属性列(以便在需要时可以将碎片站点再次形成一个整体(父) 使用公共列的表)。例如,EMPLOYEE 表具有 ENO (PRIMARY KEY)、ENAME、ADDRESS、EMAIL 和 SALARY 等属性。将此表垂直分割为两个站点,例如站点 1 和站点 2。site1 中的列是 ENO、ENAME 和 ADDRESS。site2 中的列是 ENO、EMAIL 和 SALARY。
Horizontal Fragmentation 将关系划分为称为行的元组
垂直碎片将关系划分为称为列的属性。
根据我们的应用程序视图要求,我们可以将关系分割为水平或垂直。
基于应用视图的碎片化程度和正确性规则
基本上 Horizontal Fragmentation 按行拆分表格。在垂直碎片的情况下,按列拆分表。
在水平碎片表中保持与以前相同。只有行是拆分的。在 Vertical Fragmentation 中,一张表拆分为两张或多张表。
Horizontal Fragmentation 按行拆分表。它与 Vertical Fragmentation 的不同之处在于键列和非键列之间的关系保持不变。表的内容因键值而异。
横向碎片例如:公司希望每个部门维护自己的数据。在此示例中,每个部门的 Department 表中只有一行,而其他表仅包含该部门员工的数据。
简而言之,在水平碎片中,我们将表拆分为元组,这意味着在行中表的结构保持不变,只是我们拆分了一行或两行。在垂直碎片中,我们根据属性列拆分表,我们从原始表中制作更详细的表