1

私は衣料品店を作成しているため、製品ギャラリーとルックブック ギャラリーの 2 種類で構成されるギャラリー機能を作成しています。製品ギャラリーは単一の製品の写真であり、ルックブック ギャラリーは複数の製品を含む写真です。

これまでのところ、私はこのような単純化されたUMLダイアグラムを持っています

ギャラリー クラスの UML ダイアグラム

これを MySQL テーブルに変換する方法がわかりません。私は試してみましたが、このようなものを思いつきました

ギャラリー データベース UML ダイアグラム

しかし、それはやり過ぎのようで、私には面白いにおいがします。私の状況でのベストプラクティスは何ですか? 私は正しい軌道に乗っていますか、それとも間違っていますか?

4

3 に答える 3

2

これに関する「ベストプラクティス」が何であるかはわかりません.NO-SQLデータベースを使用するか、リレーショナルデータベースを使用する場合は、ギャラリー、写真、および製品の3つのテーブルを使用できます.

ギャラリーには多くの写真を含めることができます

画像には多くの製品を含めることができます。

ギャラリーの種類の違いは、属性に含まれているだけです。

于 2013-03-09T03:03:41.483 に答える
2

まず、継承が必要な動作を実装するための最良の方法であるかどうかを検討してください。一般に、継承よりも構成を優先するのが最善です。あなたの図から、問題を解決するために継承はまったく必要ないと思います。

継承を実装する必要がある場合は、使用できる戦略がいくつかあります。優れたオブジェクト リレーショナル マッパーを探すと、以下の戦略をより簡単に実装できるため、非常に良い考えです。.NET を使用している場合は、NHibernateまたはEntity Frameworkが適切なオプションです。Java Hibernateの場合、かなり優れています。

クラス階層ごとの表

ここでは、クラス階層全体に対して 1 つのテーブルを作成します。これは、階層内のすべてのクラスが多くの列を共有している場合に最も意味があります。各行が属するサブクラスを識別できるように、「識別子」列を追加する必要があります。あなたの例では、

  • ギャラリー
  • 写真

サブクラス間に多くの異なる列がないように見えるため、この戦略はあなたにとって最も理にかなっていると思います。

サブクラスごとのテーブル

この例では、サブクラスごとにテーブルを作成します。これは、継承階層内のクラスが多くの共通列を共有していない場合に最も意味があります。

したがって、次のようなテーブルがあります。

  • 製品ギャラリー
  • logbook_gallerys
  • 商品写真
  • logbook_picture

クラスごとのテーブル

これはあなたの図からの戦略です。table per-subclass と同様に、これは各サブクラスに異なる列がある場合に便利です。table-per-subclass に対する利点は、1 つの大きな結合でクラス階層全体をクエリする方が簡単であることです。欠点は、多くのテーブルが作成されることです。

于 2013-03-09T03:12:06.180 に答える
0

そのデータベース スキーマは失敗する運命にあるようです。スキーマを定義する際に最も重要なことは、問題の名詞と動詞から始めることです。あなたの環境がどのようなものかを言葉で説明してください。どのようなエンティティがありますか? エンティティは互いにどのように相互作用しますか? たとえば、「ギャラリーには写真があります。」この言葉だけで、ギャラリーと写真の間に関連性があることがわかります。

名詞と動詞の関連付けができたら、「ギャラリー」や「写真」などのエンティティの説明を開始できます。ギャラリーと写真の間には 1 対 1 の関係がありますか、それとも 1 つのギャラリーに対して複数の写真がありますか?

これらのことを考えて、ここでいくつかの基本的な設計のヒントをチェックしてください: http://msdn.microsoft.com/en-us/library/b42dwsa3(v=vs.71).aspx

于 2013-03-09T03:04:16.577 に答える