当远程数据库不共享数据时,数据分区是无交集的。例如,每个销售代表都有自己的一组客户,并且他们不与其他销售代表共享客户。
在下面的示例中,有三个表存储着销售代表和客户之间的交互信息:Customers、Contacts 和 SalesReps。每个销售代表都向若干个客户销售产品。某些客户只有一个联系人,而另一些客户则有多个联系人。
下表介绍了 Customers、Contacts 和 SalesReps 数据库表。 有关这些表的详细信息,请参见无交集数据分区。
表 | 说明 | 表定义 | ||
---|---|---|---|---|
Contacts |
与该公司有业务来往的所有单独联系人。每个联系人都属于单个客户。Contacts 表包含以下几列:
|
|
||
Customers |
与该公司有业务来往的所有客户。Customers 表包含以下几列:
|
|
||
SalesReps |
在该公司工作的所有销售代表。SalesReps 表包含以下几列:
|
|
销售代表必须预订提供以下信息的发布:
为公司工作的所有销售代表的列表 以下语句将创建一个发布整个 SalesRep 表的发布:
CREATE PUBLICATION SalesRepData ( Table SalesReps ...) ); |
指派给他们的客户列表 此信息可在 Customers 表中找到。以下语句将创建一个发布 Customers 表的发布,该发布包含与 Customers 表中的 rep_key 列值匹配的行:
CREATE PUBLICATION SalesRepData ( TABLE Customers SUBSCRIBE BY rep_key ... ); |
他们的被指派客户的联系信息列表 此信息可在 Contacts 表中找到。Contacts 表必须在销售代表之间进行分区,但没有对 SalesRep 表中的 rep_key 值的任何引用。要解决此问题,可以在 Contacts 项目中使用一个引用 Customers 表的 rep_key 列的子查询。
以下语句将创建一个发布 Contacts 表的发布,该发布包含引用 Customers 表的 rep_key 列的行。
CREATE PUBLICATION SalesRepData ( ... TABLE Contacts SUBSCRIBE BY (SELECT rep_key FROM Customers WHERE Contacts.cust_key = Customers.cust_key ) ); |
Customers 表中的某一行含有 Contacts 表的当前行中的 cust_key 值;SUBSCRIBE BY 语句中的 WHERE 子句可确保该子查询只返回一个值。
以下语句创建完整的发布:
CREATE PUBLICATION SalesRepData ( TABLE SalesReps, TABLE Customers SUBSCRIBE BY rep_key, TABLE Contacts SUBSCRIBE BY (SELECT rep_key FROM Customers WHERE Contacts.cust_key = Customers.cust_key ) ); |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |