我创建了一个C#应用程序,它从MS Access数据库生成克隆副本并将数据迁移到另一个数据库服务器,但这需要更改主键。更改父表键时,保持子表的引用完整性的最佳方法是什么?
谢谢,
安德鲁
答案 0 :(得分:3)
您可能已经知道这一点,但您的主键列值不应该发生变化,如果有的话。但是,除此之外,您没有提到您正在使用的数据库。但是使用SQL Server,您可以设置FK来执行所谓的级联更新。这意味着如果PK值发生变化,子表中的所有FK行也会更改值。
以下是一篇描述此内容的文章:http://blogs.techrepublic.com.com/datacenter/?p=128
答案 1 :(得分:0)
我假设您已将autoIncrement设置为Access表的PK字段上的数据类型,并且您希望新数据库中具有相同的功能。
使用数字而非自动增量数据类型将Access表导入目标表。然后在父表和子表之间添加RI。然后编辑您的PK字段以自动增加。
答案 2 :(得分:0)
我最终使用复合主键,因为每次应用程序制作克隆副本时,它都是整个数据集的“快照”。因此,我添加了一个名为“Revision”的列,并将每个表的主键设置为Pk = OID + REVISION。
对于子表,它应该通过主键引用父表,这意味着外键也将是复合的。你如何在Access中实现这种关系?我所做的是在Access 2007中转到“数据库工具” - > “关系”并编辑关系,以便显示以下内容:
(父母Oid)1< --- many(儿童parentKey),(父母修订)1< --- many(儿童修订版)
请告诉我这是做到这一点的方法。或者,如果有人可以告诉我如何使用SQL命令实现这一点,我也会尝试。
谢谢,