Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Remote » SQL Remote 复制设计 » SQL Remote 复制设计和设置

 

参照完整性错误

关系数据库中的表通常是通过外键引用进行关联的。因此,参照完整性约束确保了数据库保持一致。请参见实施实体完整性和参照完整性

只复制数据库的一部分时,必须确保复制的数据库仍然具有参照完整性。

最好避免未复制的引用表错误。您的远程数据库不应包含指向未复制表的外键。

例如,在统一数据库中,SalesOrders 表具有一个指向 Employees 表的外键。SalesOrders.SalesRepresentative 是引用主键 Employees.EmployeeID 的外键。

示例数据库的实体关系图。

创建了一个排除 Employees 表、但包括整个 SalesOrder 表的发布:PubSales。

CREATE PUBLICATION PubSales (
   TABLE Customers,
   TABLE SalesOrders,
   TABLE SalesOrderItems,
 );

某远程用户 Rep1 预订了 PubSales 发布。然后,您从统一数据库中抽取 Rep1 并尝试为 Rep1 创建一个数据库。但是,数据库创建失败,因为 Rep1 缺失 Employees 表。要避免出现此问题,您可以:

  • 删除外键引用   要排除外键引用,请在使用抽取实用程序 (dbxtract) 时指定 -xf 选项。

    但是,如果从远程数据库中删除外键引用,远程数据库中将没有任何约束可以防止将无效的值插入到 SalesOrders 表的 SalesRepresentative 列。

    如果远程数据库的 SalesRepresentative 列中插入了无效的值,复制的 INSERT 语句将在统一数据库上失败。

  • 在发布中包含缺失的表   在发布中包含 Employees 表(或至少包含其主键)。例如:
    CREATE PUBLICATION PubSales (
       TABLE Customers,
       TABLE SalesOrders,
       TABLE SalesOrderItems,
       TABLE Products,
       TABLE Employees
    );

另请参见

插入错误