了解关系

已完成

若要为生成的大多数解决方案提供高效且可缩放的解决方案,需要将数据拆分为不同的容器(表)。 尝试将所有内容存储到单个容器中可能效率低下并且难以处理和理解。

下面的示例可帮助说明此概念。

假设你需要创建一个系统来管理销售订单。 你需要产品列表以及现有库存量、物料成本和销售价格。 还需要客户及其地址和信用等级的主列表。 最后,你需要管理你进行的销售的发票,因此需要一种方法来存储发票数据。 发票应包含日期、发票号和销售人员、客户信息(包括地址和信用等级)等信息,并且发票上的每项都有一个行项。 行项应包括对你销售的产品的引用,能够为每个产品提供正确的成本和价格,并根据你在该行项中销售的数量减少现有数量。

尝试创建单个表来支持前面所述的功能会效率低下。 处理此业务方案的一种更好的方法是创建以下四个表:

  • 客户

  • 产品

  • 发票

  • 行项

通过为其中每项都创建一个表并使它们相互关联,可以构建可在保持高性能的同时进行缩放的高效解决方案。 将数据拆分为多个表还意味着不必存储重复数据或支持包含大量空白数据的巨型行。 此外,如果将数据拆分为单独的表,则报表会容易得多。

相互关联的表具有关系连接。 表之间的关系以多种形式存在,但两种最常见的形式是一对多和多对多,Microsoft Dataverse 同时支持这两种形式。

一对多关系也称为“父-子关系”。 在上面的发票示例中,发票表为父表,行项为子表。 一个发票可以具有零个、一个或许多行项(子行),但是行项会始终只与一个发票(父行)相关。 通常,如果没有父行,子行将不存在。

仅允许使用唯一值的列(例如发票号)用于识别父行。 此唯一列称为键。 相同值(父键)存储在相关子行中。 当子行用于存储父键值时,此行称为外键。 使用筛选显示其外键中的值与父行中的键值相匹配的子行。 这使应用程序可以显示属于特定父行(上面示例中的发票)的子行(上面示例中的行项)。 此概念是许多业务软件应用程序的基础。

将数据拆分为不同表可实现可缩放的高效解决方案设计,但知道如何将数据拆分为多个表可能会十分困难。 值得庆幸的是,Microsoft Dataverse 已包含大多数组织需要的许多表。 通过使用标准表并扩展它们,可以确保围绕经过验证的可缩放方式(用于存储解决方案使用的数据)来构建解决方案。