了解和评估表关系
评估两个给定表之间的关系时,您需要了解一个表中可能属于另一个实体的实例数量,反之亦然。 例如,使用users
表和orders
表。 在这种情况下,您希望了解给定 用户 下了 个订单 个,以及 个订单 可能属于多少个 用户。
了解关系对于维护数据完整性至关重要,因为它会影响计算列和维度的准确性。 若要了解详细信息,请参阅关系类型和如何计算Data Warehouse中的表。
关系类型 types
两个表之间可以存在三种类型的关系:
One-to-One
onetoone
在one-to-one
关系中,表B
中的记录只属于表A
中的一个记录。 表A
中的记录只属于表B
中的一个记录。
例如,在人与驾驶证号码的关系中,一个人只能有一个驾驶证号码,而一个驾驶证号码只属于一个人。
One-to-Many
onetomany
在one-to-many
关系中,表A
中的记录可能属于表B
中的多个记录。 考虑orders
和items
之间的关系 — 一个订单可以包含多个项目,但一个项目属于单个订单。 在这种情况下,orders
表为一侧,items
表为多侧。
Many-to-Many
manytomany
在many-to-many
关系中,表B
中的记录可能属于表A
中的多个记录。 反之亦然,表A
中的记录可能属于表B
中的多个记录。
考虑 产品 和 类别 之间的关系:一个产品可以属于多个类别,而一个类别可以包含多个产品。
评估表 eval
根据表之间存在的关系类型,您可以了解如何计算Data Warehouse中的表。 由于这些关系决定了多表计算列的定义方式,因此了解如何识别表关系以及该表属于哪一侧(one
或many
)非常重要。
可以使用两种方法评估Data Warehouse中给定表对的关系。 第一种方法采用概念框架,该框架考虑表的实体如何彼此交互。 第二个方法使用表的架构。
使用概念框架 concept
该方法使用概念框架来描述两个表中的实体如何相互交互。 重要的是要了解,这一框架评估了考虑到这种关系而可能实现的情况。
例如,在考虑用户和订单时,请考虑关系中可能的所有因素。 注册用户在其生命周期内不得下任何订单、仅下一份订单或多份订单。 如果您已启动业务,但尚未下任何订单,则给定用户可能在其生命周期内下许多订单。 构建表是为了适应这种情况。
要使用此方法,请执行以下操作:
-
标识每个表中描述的实体。 提示:它通常是名词。 例如,
user
和orders
表正显式描述用户和订单。 -
识别描述这些实体如何交互的一个或多个动词。 例如,将用户与订单进行比较时,用户会“下单”。 另一方面,订单“属于”用户。
此类型的框架可以应用于Data Warehouse中表的任何配对。 这允许您轻松识别关系的类型、哪个表是一侧以及哪个表是多侧。
一旦确定了描述两个表如何交互的术语,就可以通过考虑第一个实体的一个给定实例与第二个实体的关系来构建两个方向的交互。 以下是每种关系的一些示例:
One-to-One
一个给定人员只能有一个驾驶执照号码。 一个给定的驾驶执照号码只属于个人。
这是一个one-to-one
关系,其中每个表都是单面。
One-to-Many
一个给定订单可能包含许多项目。 一个给定项目只属于一个订单。
这是一种one-to-many
关系,其中订单表为一侧,物料表为多侧。
Many-to-Many
一个给定产品可能属于多个类别。 一个给定类别可以包含许多产品。
这是一个many-to-many
关系,其中每个表是多边。
使用表的模式 schema
第二种方法是使用表模式。 架构定义哪些列是Primary
和Foreign
键。 您可以使用这些键将表链接在一起,并帮助确定关系类型。
确定将两个表链接在一起的列后,请使用列类型来评估表关系。 以下是一些示例:
One-to-one
如果使用两个表的primary key
链接这些表,则每个表中将描述相同的唯一实体,并且关系为one-to-one
。
例如,users
表可能捕获了大多数用户属性(如名称),而补充的user_source
表捕获了用户注册源。 在每个表中,一行表示一个用户。
One-to-many
当使用指向primary key
的Foreign key
链接表时,此设置描述了one-to-many
关系。 一侧是包含primary key
的表,多侧是包含foreign key
的表。
Many-to-many
如果以下任一项为true,则关系为many-to-many
:
Non-primary key
列正用于链接两个表
- 复合
primary key
的一部分用于链接两个表
后续步骤
正确评估表关系对于准确建模数据至关重要。 现在您已了解表如何相互关联,请查看您可以使用Data Warehouse管理器做什么。