2016-11-16 8 views
0

私はハイバーネイトでオンラインライブラリーを実装したいと考えています。ここに私のSQL sschemaは次のとおりです。オンラインライブラリー/ショップ設計実装の選択のための休止状態継承

sql schema

ブックと私が参加し、サブクラスごとのタイプのテーブルの継承を休止状態使用を考えていますプログラミングブックの間。私は10列のテーブルに同じ列が重複しているという点がないので、この方法でSQLスキーマを設計しました。たぶん、一般的な列を1つ追加する必要があるかもしれません。私は10個のテーブルでそれをしたくありません。しかし、これは、Bookがどこかで必要とされるときは、すべてのサブタブ間で巨大な結合が行われることを意味します(私は2つしかありませんが、50種類のブックタイプがあります!!!)。例えば、私がオンラインショップを持っていたら、私はProduct、Tv、Laptop、Phoneなどを持っていただろう。

この動作を回避するためにどのような設計が可能ですか?

私の考えは以下のとおりです。

  • 私はすべてのサブテーブル内のすべての列を複製でき、ひいては、まったく継承を使用していない、異なるエンティティのようにそれらを扱います。ここで唯一のことは、他のテーブル(著者など)の特定のブックテーブルを結ぶ必要があることです。
  • 私は現在のSQLスキーマを維持しながら一方向の関連付けを使用することを避けることができました(ProgrammingBookにはBookなどがあります)

どのようなオプションをお勧めしますか?

敬具、経験から

+0

「ここだけの事は、私は他のテーブル(著者、など)のすべての特定帳テーブルを結ぶために持っているということである」ことができます詳細は、してください? :) – davidxxx

+0

あなたが今すぐ見ることができるように、作者へのProgrammingBookの関係は本を通してです。もし私が各テーブルの列を複製するならば、ProgrammingBookは著者などと結びつけられなければならず、PsychologyBookは作者などとの関係を持つ必要があり、それぞれの本のために同じである必要があります – adragomir

+0

それは私のものでした。ありがとうございます – davidxxx

答えて

0

、Hibernateで継承を使用しているとき、あなたは弁別して、ビューの階層ポイントごとに表を好む必要があります。ここで

は、あなたが答えを選ぶ助けることができるスレッドです:How can you represent inheritance in a database?

+0

私は、パフォーマンスの観点からはあなたに同意しますが、同じテーブルにすべての製品を配置し、SQLスキーマを標準化解除することを意味します。 – adragomir

+0

データをすばやく入手できるため、非常に高価な操作ではありません – DamCx