从统一数据库删除行时,必须存在该行的记录,以便 download_delete_cursor 显式选中该行,并从含有该行的远程数据库中显式删除。可以使用逻辑删除或影子表两种方法来执行此操作。
逻辑删除 使用此方法时,行并未删除。在状态列中将不再需要的数据标记为非活动。必须在 download_cursor 和 download_delete_cursor 的 WHERE 子句和多数应用程序查询中引用该行的状态。
CustDB 示例应用程序使用了此技术,该示例在 ULEmpCust.action 列中使用 D 表示 [删除]。脚本使用该值从远程数据库中删除记录,并在同步完成时从统一数据库中删除记录。CustDB 在 ULOrder 表中也使用了此技术,Contact 示例则在 Customer、Contact 和 Product 表中使用了此技术。
MobiLink 同步模型支持逻辑删除,它会假定逻辑删除列仅存在于统一数据库中而不在远程数据库中。在将统一模式复制到新的远程模式时,将忽略所有与模型的同步设置中的逻辑删除列相匹配的列。对于新模型,缺省列名称为 deleted。
将逻辑删除列名称添加至远程模式:
在 [下载删除] 页面的 [创建同步模型向导] 中,单击 [使用逻辑删除]。
重命名逻辑删除列,以使其不与统一数据库中的任何列名称相匹配。
完成向导后,更新远程模式并保留缺省表选择。逻辑删除列名称将出现在模式更改列表中,并将被添加到远程模式中。
您需要设置列映射,将远程数据库的逻辑删除列映射到统一数据库的逻辑删除列。
影子表 使用此方法时,将创建一个影子表来存储被删除的行的主键值。删除一行后,触发器将填充影子表。download_delete_cursor 可以使用影子表从远程数据库中删除行。影子表只需要包含真实表中的主键列。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |