0

我必须将 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 不允许我在外键上使用级联更新,因此无法轻松迁移数据库。

更糟糕的是,该软件有很多编辑屏幕,使用 DataSets、DataGridViews 和 Windows 窗体中的绑定,因此编辑器几乎可以自动运行。例如,editor forPRODUCTS是一个简单的 windows 窗体,每当用户重命名产品(更改其NAME)时,更改都会通过数据库(通过级联更新)传播到PRICE_LISTINGPRODUCT_ALTERNATIVES。而且,如果应用程序想要显示价格列表,它很简单SELECT * FROM PRICE_LISTING,包括产品名称和价格。

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

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

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

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

该怎么办?

4

0 回答 0