2

DBに2つのテーブルがあります

  • FuelStation(fuel_station_id:int(PK)、fuel_station_name:varchar、fuel_brand_id:int(FK))
  • FuelBrand(fuel_brand_id:int(PK)、fuel_brand_name:varchar)

ご覧のとおり、両方のテーブルはを介してリンクされています。外部キー(fuel_brand_id)

ここで、上記のデータモデルに対応するオブジェクトモデルを設計したいのですが、次の2つのアプローチからどちらのアプローチを使用するか混乱しています。

  • クラスを1つだけ作成し、クラスのようにFuelStation燃料ブランドを保管するかどうか。StringFuelStation

また

  • 2つのクラスを作成します:FuelStationFuelBrand。そして、 1つの燃料ステーションには1つの燃料ブランドしかありませんが、1つの燃料ブランドには多くの燃料ステーションを含めることができるため、それらを多対1の関係に関連付けます。

Q1。どちらのアプローチが良いですか?

Q2。各アプローチの長所と短所は何ですか?


私の知識まで:

アプローチ2の長所

  • これにより、オブジェクトモデルがよりきめ細かくなりました。

  • Acc。優れた設計原則に従えば、オブジェクトモデルは少なくともリレーショナルモデルと同じくらいきめ細かくなければなりません。そしてapproach2はその原則に従います

アプローチ1の長所

  • FuelStationごとにFuelBrand用に個別のオブジェクトを作成する必要はありません
4

3 に答える 3

2
  1. 1つのクラスFuelStationのみを作成し、FuelStationクラスにStringとして燃料ブランドを保存します。
  2. FuelStationとFuelBrandの2つのクラスを作成します。そして、1つの燃料ステーションには1つの燃料ブランドしかありませんが、1つの燃料ブランドには多くの燃料ステーションを含めることができるため、それらを多対1の関係に関連付けます。

多くはコンテキストに依存するため、これら2つのアプローチの間に明確な普遍的な選択はありません。いくつかの決定要因:

  • ステーションとブランドはいくつありますか?同じ燃料ブランドを使用しているステーションが多数ある場合は、2番目のアプローチを使用して重複を避ける方がよい場合があります。OTOH実際に各燃料ブランドが1つのステーションでのみ使用されている場合(そしてそれが変更されることはない場合)、最初のアプローチを使用することは理にかなっています。
  • FuelBrandプロパティが変更されたり、新しいプロパティが導入されたりする可能性はありますか?その場合も、2番目のアプローチを使用することをお勧めします。そうしないと、クラスFuelBrandを変更する必要があります。FuelStation
  • 将来、ガソリンスタンドに複数の燃料ブランドが存在する可能性はありますか?それには、2番目のアプローチが必要になります。

結論として、2番目のアプローチはより柔軟なので、現時点でこの設計を明示的に必要とする予測可能な変更がない場合でも、ソフトウェア開発では決して言わないでください:-)

于 2010-06-23T08:48:19.127 に答える
1

どちらが良いかは、情報をどのように処理するかによって異なります。

a)特定のブランドを提供するすべてのステーションを一覧表示するのが興味深い場合は、FuelBrand名からFuelStationのコレクションへのある種のマップを選択することもできます。

b)燃料ブランドが使用したいプロパティ(価格など)を持っている、または持つ予定がある場合は、それからクラスを作成することをお勧めします。

于 2010-06-23T08:49:35.447 に答える
0

FuelStationごとにFuelBrand用に個別のオブジェクトを作成する必要はありません

どちらのアプローチにも同じ数のオブジェクトがあります。N個のFuelBrandオブジェクトまたはN個の文字列オブジェクトがあります。Nは、オブジェクトを再利用するかどうかに応じて、ブランドの数またはステーションの数になります。ですから、その議論は疑わしいものです。

ブランドが別のものではなくブランドであることを明示するため、各テーブルをクラスで表す傾向があります。また、同じ名前のさまざまなブランドにも対応しています。これは、可能性は低いですが、リレーショナルスキーマで許可されています。

于 2010-06-23T09:05:18.167 に答える