3

ピストン エンジンとロータリー エンジンの両方を含む、さまざまなエンジンに関するデータを MySQL データベースに保存したいと考えています。


OO 言語では、スーパークラスを作成して拡張し、サブクラスEngineを取得できます。PistonEngineRotaryEngine

PistonEngineサブクラスには、CylinderNoPistonBorePistonStrokeなどのプロパティが含まれます。

RotaryEngineサブクラスには、RotorThicknessRotorDiameterなどのプロパティが含まれます。


MySQL では、ピストン エンジンとロータリー エンジン用にそれぞれ 2 つの個別のテーブルを作成できますが、エンジン データの一部としてEngineTypeフィールドを保持し、両方のエンジン タイプに共通するすべてのデータを 1 つのテーブルに格納することをお勧めします。

データの冗長性をできるだけ回避するようにデータベースを設計するにはどうすればよいですか?

4

2 に答える 2

2

この状況で4つのテーブルを作成します。

EngineTypesと呼ばれるもので、エンジンタイプのIDと値のペアがあります1ロータリー2ピストン

ピストンエンジンとロータリーエンジンの両方に関連する情報を含むエンジンと呼ばれるもの。エンジンタイプIDを含む列が含まれます。

すべてのロータリーエンジン固有のデータを含むRotaryEngineDetailsと呼ばれる1つのテーブル。エンジンテーブルへの外部キーがあります。

すべてのピストンエンジン固有のデータを含むPistonEngineDetailsと呼ばれる1つのテーブル。

于 2009-09-25T17:48:54.360 に答える
1

私の提案は、エンジン タイプ自体のキーを含め、両方のエンジン タイプに必要なすべての情報を含む単一のテーブルを作成することです。その後、エンジン「クラス」のタイプごとにビューを作成して、独自のオブジェクトのように見せることができます。ただし、保存しているすべてのデータによっては、構造が正規化されないため、作成できない場合があります。

更新 コメントに基づいて、回答を拡大しました。

定義上、ビューは SELECT クエリの結果セットで構成される仮想テーブルまたは論理テーブルです。ビューは行と列で構成されるテーブルのようなものなので、テーブルと同じようにデータを取得および更新できます。ビューは動的であるため、物理スキーマとは関係なく、ビュー定義としてのみ保存されます。ビューのソース データであるテーブルが変更された場合。ビュー内のデータも変更されます。( http://www.mysqltutorial.org/introduction-sql-views.aspx )

ビューの作成に関するリファレンスへのリンクを次に示します。ここにもう 1 つのリンクがあります。

于 2009-09-25T17:32:56.450 に答える