テーブルデザインに2つのオプションを選択しようとしています。リレーショナルデータベース - フィールド設計におけるより良いオプション
下記の2つの表「CLASS」と「SECTION」では、「CLASS」表の「YEAR-CLIENT_ID-CLS_SEQ」の組合せごとに、「SECTION」表に1つ以上の項目があります。
情報: テーブルCLASSとSECTIONの両方があるマスタデータは、そのは、設定を手動で行われ、何のプログラム更新は行われません。 CLS_SEQとSEC_SEQが使用される他の子トランザクションテーブルがあります。すべてのトランザクションテーブルにはYEAR列とCLENT_ID列もあります。
クエリ: テーブルデザインに関して、どのオプションがCLS_SEQとSEC_SEQに適していますか?
マスターデータ設定であるため、私はデータに明瞭さをもたらし、毎年メンテナンスしやすいので、オプション1を選択します。またオプション1では、CLS_SEQおよび/またはSEC_SEQとともにYEARおよびCLIENT_ID(これらは常にアプリケーションで使用可能)を渡すことによって、さらにトランザクションテーブルのデータを取得することもできます。
私の質問は、オプション1を使用して結合でデータ&を取得している間、パフォーマンスに劇的な影響を与えますか?子/トランザクションテーブルのいずれかからの結合を使用してCLASSまたはSECTIONテーブルから 'some data'を取り出す必要があるときは、常にYEARフィールドとCLIENT_IDフィールドも使用する必要があります。
また、過去4年間のレコードのみがすべてのマスタテーブルとトランザクションテーブルに保持され、残りはアーカイブされることに注意してください。
ありがとう、ありがとうございます。 「あなたの記憶に鍵を追加する必要性」についてもう少し詳しく説明してください。私は実際にOption-2を実装しましたが、それに慣れていません。 CLASSとSECTIONの両方のテーブルでは、レコードの数は1000(最大10000)で実行されると予想しますが、他のトランザクションテーブルには100万レコードがある可能性があります。それでも、これらのテーブルは手動で管理されているので、Option-1が最適であると思います.Option-2の悪夢でもあります。 – user5281896
私が前提としているのは、共有していない他のテーブルを使用しているときにセクションシーケンスキーを使用することです。これはキーが導出されているため、オプション1の場合と同様に、入力があればいつでも他のテーブルにアクセスすることができるほかのテーブルにアクセスする必要があるたびに、そのテーブルをどこかに保存するか、マスターテーブルからフェッチする必要があります。 –
もう一度ありがとう。他の子テーブルはExam、Markなどのようなもので、CLS_SEQ(OR)SEC_SEQが外部キーになります。すべての必要な入力フィールド、Year、Client_id、Cls_seq/Sec_seqは、常にテーブルの読み込み/結合の入力として使用できます。 – user5281896