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

SAP Sybase SQL Anywhere 16.0 (中文) » MobiLink - 入门 » MobiLink 教程 » 教程:将 MobiLink 与 Adaptive Server Enterprise 统一数据库结合使用

 

第 3 课:向统一数据库添加唯一键

在本课中,将向统一数据库添加唯一主键。

前提条件

本课假定您已完成前面的所有课程。 请参见第 1 课:设计模式

本课假定您拥有在教程教程:将 MobiLink 与 Adaptive Server Enterprise 统一数据库结合使用开头的“权限和特权”部分中列出的角色和特权。

上下文和注释

在同步系统中,表的主键是在不同数据库中唯一地标识行的唯一方式,也是检测冲突的唯一方式。正在协调的每一个表都必须具有一个主键。切勿对主键进行更新。同时必须确保已插入到一个数据库中的主键值不被插入到另一数据库。

可通过多种方法来生成唯一主键。为简便起见,本教程使用了复合主键方法。此方法创建多个列的主键,这些主键在统一数据库和远程数据库中都是唯一的。

 任务
  1. 使用 Adaptive Server Enterprise 中的 isql,以 sa 身份连接到 pubs2 数据库。在命令提示符处,运行以下命令(全部内容都输入到一行上):

    isql
    -U sa
    -P your-password-for-sa-account
    -D pubs2

    如果正在远程访问 Adaptive Server Enterprise,请使用 -S 选项指定服务器名称。

  2. 根据为 salesdetail 表创建的复合主键,以下几行并不唯一。为简化起见,请执行以下语句删除这些行:

    DELETE FROM salesdetail 
    WHERE stor_id = '5023' 
    AND ord_num = 'NF-123-ADS-642-9G3' 
    AND title_id = 'PC8888'
    
    DELETE FROM salesdetail 
    WHERE stor_id = '5023' 
    AND ord_num = 'ZS-645-CAT-415-1B2' 
    AND title_id = 'BU2075'
  3. 以下索引会妨碍在之前的步骤中创建主键。要删除索引,请执行以下语句:

    DROP INDEX authors.auidind
    DROP INDEX titleauthor.taind
    DROP INDEX titles.titleidind
    DROP INDEX sales.salesind
  4. 执行以下语句添加唯一主键:

    ALTER TABLE au_pix ADD PRIMARY KEY (au_id)
    ALTER TABLE authors ADD PRIMARY KEY (au_id)
    ALTER TABLE titleauthor ADD PRIMARY KEY (au_id, title_id)
    ALTER TABLE titles ADD PRIMARY KEY (title_id)
    ALTER TABLE discounts ADD PRIMARY KEY (discounttype)
    ALTER TABLE stores ADD PRIMARY KEY (stor_id)
    ALTER TABLE sales ADD PRIMARY KEY (stor_id, ord_num)
    ALTER TABLE salesdetail ADD PRIMARY KEY (stor_id, ord_num, title_id)

    执行这些语句后,MobiLink 服务器将连接到统一数据库,并为任意数量的远程数据库设置同步。

    注意

    也可以与没有主键的统一数据库同步数据。但此时您必须记录您自己的作用于影子表的同步事件,以使用这些事件在其它表中唯一地标识行。

    在下一课中将根据统一模式创建远程模式,所以远程模式与统一模式的主键相同。

    列经过特别的选择,以确保对于所有数据库存在唯一主键。对于 sales 表,其主键由 stor_id 和 ord_num 两列构成。任何插入到远程 sales 表的值都必须具有唯一订单号(stor_id 值始终不变)。这样可以确保各个远程 sales 表的唯一性。如果需要从多个书店上载数据,则统一 sales 表中的主键可防止发生冲突。由于各个书店的 stor_id 值各不相同,因而来自一家书店的上载始终是唯一的。

    对于 salesdetail 表,其主键由 stor_id、ord_num 和 title_id 列构成。一个订单中可能包含若干书籍标题。对于远程 sales 表,不同的行可能具有相同的 stor_id 和 ord_num 值,但是其 title_id 值必须不同。此配置可以确保每个远程 salesdetail 表的唯一性。与 sales 表类似,从一个书店上载到统一数据库的每一项内容对于另一家书店都是唯一的,因为它们的 stor_id 值不同。

结果

已删除不唯一的行,并已将唯一主键添加到统一数据库中。

 另请参见