0

FirebirdデータベースをMSSQLに移行する必要があります。元の作成者は、可変の主キーを持つようにデータベースを設計しました。たとえば、テーブルがあります

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フォームのバインディングを使用しているため、エディターはほぼ自動的に機能します。たとえば、のエディタPRODUCTSは単純なWindowsフォームであり、ユーザーが製品の名前を変更する(製品を変更するNAME)たびに、変更はデータベースを介して(カスケード更新を介して)テーブルに伝達されPRICE_LISTINGますPRODUCT_ALTERNATIVES。また、アプリが価格表を表示したい場合は、SELECT * FROM PRICE_LISTING製品名と価格を含む単純な操作を行います。

1つのアプローチは、代理キーを追加するIDことです。各テーブルにID列を追加し、たとえばPRICE_LISTINGテーブルを(PRODUCT_ID, price)などに変更します。しかし、価格を表示するには、次のようなビューを定義する必要があります。

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

次に、自動生成されたデータセットなどを変更して、ビューから選択し、ビューを更新する必要があります。

一言で言えば、元の作者の観点から、私たちはプログラムを壊し、それをより複雑にしています。単純な方法で移植した場合に機能しない唯一のことは、カスケード更新ですが、データベース設計には非常に欠陥があり、修正しないとメンテナンスの悪夢になると思います。

何をすべきか?

4

0 に答える 0