将具有可修改主键的数据库迁移到MSSQL

时间:2012-10-29 08:49:29

标签: sql-server database migration firebird

我必须将Firebird数据库迁移到MS SQL,并且原作者以具有可变主键的方式设计数据库。例如,我们有一个表

PRODUCTS with primary key (NAME,CATEGORY,SHORTNAME) and some data
PRICE_LISTING (NAME,CATEGORY,SHORTNAME) - foreign key to PRODUCT, and some data like price
PRODUCT_ALTERNATIVES (ORIGINAL_NAME,ORIGINAL_CATEGORY,ORIGINAL_SHORTNAME; REPLACEMENT_NAME,REPLACEMENT_CATEGORY,REPLACEMENT_SHORTNAME) - foreign keys to PRODUCTS

如您所见,每当产品名称发生变化时,其他表中的大量数据都必须更改。原作者通过对外键的级联更新解决了这个问题。由于某些原因,MS SQL不允许我对外键使用级联更新,因此无法轻松迁移数据库。

更糟糕的是,该软件有很多编辑屏幕,在Windows窗体中使用DataSet,DataGridViews和绑定,因此编辑器可以自动运行。例如,PRODUCTS的编辑器是一个简单的窗体,每当用户重命名产品(更改其NAME)时,更改都会通过数据库(通过级联更新)传播到PRICE_LISTING并且PRODUCT_ALTERNATIVES个表格。此外,如果该应用想要显示价格列表,则会执行包含产品名称和价格的简单SELECT * FROM PRICE_LISTING

一种方法可能是为每个表添加代理键 - ID标识列,然后将PRICE_LISTING表修改为(PRODUCT_ID, price)等。但是,为了显示价格,我必须定义

的视图
SELECT *,PRODUCT.NAME,PRODUCT.CATEGORY,PRODUCT.SHORTNAME FROM PRICE_LISTING join PRODUCT on ...

然后,必须修改自动生成的DataSet等,以便从视图中进行选择,更新视图。

简而言之,从原作者的角度来看,我们正在破坏程序并使其更加复杂。在以简单方式移植时唯一不起作用的是级联更新,但我发现数据库设计存在很大缺陷,如果不修复,它将成为维护的噩梦。

怎么办?

0 个答案:

没有答案