-1

私は、ユーザーがブロックを使用してテストを記述できるアプリケーションに取り組んでいます。ブロックはコマンド(assign、など)であるためforif一部のブロックには他のブロックを含めることもできます。
複合パターンを使用しています-and abstract blockleafブロックcompositeクラス(これも抽象)があり、具象ブロックは関連するクラスから継承します(ifブロックは複合、assignブロックはリーフ)。
以前はテスト全体をシリアル化してblobとして保存していましたが、これを変更することを検討しています(たとえば、テスト内の検索を有効にするため)。
では、DBの設計はどのように見えるべきでしょうか?オブジェクトごとにテーブルを用意する必要がありますか?私たちの場合、それは約30のテーブルを意味します。ブロックのタイプを列として含める必要がありますか?これは、私たちが巨大になることを意味しますif-elseどこかに切り替えます。
私はあなたの洞察と提案に感謝します。
ありがとう。

4

1 に答える 1

2

オブジェクトの種類ごとにテーブルが必要です。同じ種類の複数のインスタンスを同じテーブルの複数の行に格納し、それらを互いに区別するために異なるデータを使用する必要があります。

2つのオブジェクトが同じ種類であるかどうかの問題は、特にアウトラインを作成する場合、微妙な問題になる可能性があります。これが私の提案です。処理する予定のすべてのオブジェクトのオブジェクト指向分析を実行します。オブジェクト指向分析とオブジェクト指向設計を区別するように注意してください。必要に応じて教科書を参照してください。Peter Coadは、約20年前にOOAに関する優れた本をいくつか書きました。

OOAモデルをERモデルに変換し、動作をミックスから除外し、データのみを保持します。ソフトウェアを設計するときに持っておくと便利なので、OOAモデルをそのままにしておいてください。ERモデルはgen-specパターンに対応できるため、モデルにオブジェクトのクラスとサブクラスがある場合は、この機能を使用してください。あなたの場合、あなたはそうするでしょう。

次に、リレーショナルモデルを一連のSQLデータ定義スクリプトに変換する準備として、ERモデルをリレーショナルモデルに変換します。リレーショナルモデルには継承が組み込まれていないため、この時点でクラスとサブクラスは乱雑になります。「クラステーブル継承」と呼ばれるものについてはチュートリアルを参照してください。ここSOにはCTIの質問に対する答えがたくさんあります。

CTIを適切に実行する場合、オブジェクトタイプ(クラス)を個別のフィールドとして使用する必要はありませんが、処理速度が上がる場合は、オブジェクトタイプ(非正規化)を含めることができます。必要にならない限り、私は通常それをしません。

于 2012-09-10T14:19:26.307 に答える