質問

私は、ユーザーが販売しているアイテムの種類ごとに詳細なフィールドで広告を掲示することを可能にするウェブサイトをプログラミングしています。しかし、私は最高のデータベーススキーマについて質問があります。

このサイトは多くのカテゴリ(例えば車、コンピュータ、カメラ)を特長とし、広告の各カテゴリは、独自の明確なフィールドを持っています。コンピュータは、このような等のCPU、RAM、マザーボードモデル、と属性を持つ一方で例えば、車は持っているドアの数、メーカー、モデル、および馬力などの属性ます。

彼らはすべてのリストされているので、

さて、私はさまざまなカテゴリ(コンピュータ、CARS、CAMERAS)のそれぞれについて、親リスティングテーブルと異なる子テーブルを作成し、多型のアプローチを考えていました。それぞれの子テーブルは、リスティングTABLEにリンクしますlisting_idを持つことになります。リストがフェッチされるときに、それたリストから行をフェッチすることになる、関連する子テーブルにリンクされた行によって結合された。

LISTINGS
-listing_id
-user_id
-email_address
-date_created
-description

CARS
-car_id
-listing_id
-make
-model
-num_doors
-horsepower

COMPUTERS
-computer_id
-listing_id
-cpu
-ram
-motherboard_model
さて、このスキーマの良いデザインパターンをあるか、これを行うには良い方法はありますか。

私は、単一継承を検討したが、テーブルがあまりにも速く大きくなりすぎますので、迅速な思考オフブラッシングが、その後、別のジレンマが頭に浮かんだ - ユーザーはすべてのリスト上のグローバル検索を実行した場合、その手段は私がしなければならないこと個別にそれぞれの子テーブルを照会。それは非効率的な私は100以上の異なるカテゴリを持っている場合はどうなるの、のではないでしょうか?

私はまた、各リストの保存フィールド値という各カテゴリとフィールドテーブルのフィールドを定義マスターテーブル(メタテーブル)が存在する別のアプローチを考えたが、データベースの正規化?

Kijijiのようなサイトはそれを行うだろうか?

役に立ちましたか?

解決

あなたのデータベース設計は大丈夫です。あなたが持っているものを変更する理由はありません。私は、検索がいくつかの方法を行って見てきました。一つは、あなたが検索対象の列にわたって、インデックス検索する必要があるすべてのテーブルを結合検索ストアドプロシージャを持つことです。かなりうまく働いていた私はそれが行わ見てきた第二の方法は、唯一の必要性を検索することを何でもフィールドのコピーを取得し、検索するために使用されるテーブルを持っていることでした。その後、これらのフィールドにトリガを入れて検索テーブルを更新します。

これらは両方とも欠点を有しているが、私は、第二〜第好ましい。

EDIT

あなたは以下の表を必要とします。

カテゴリー - イド - 説明

CategoriesListingsXref - 区分 - ListingId

あなたは、検索時に指定したカテゴリのすべてのあなたのリストに参加することができ、この相互参照モデルでは、

。そして、(それが理解する方が簡単ですので)少し動的SQLを追加し、反対の検索や呼び出しクエリ上で実行するフィールド(複数可)を含めるようにクエリを構築ます。

これだけです。

EDIT 2 これは、我々はこれらのコメントボックスにフィンができることを少し大きめの議論のようです。しかし、我々が議論することは何も、以下の記事を読んで理解することができます。          http://www.sommarskog.se/dyn-search-2008.htmlする

これは本当に完全なプロの両論でそれをやってのショーあなた以上1つの方法です。 幸運ます。

他のヒント

私はあなたが選択したデザインは、あなただけ説明したシナリオのために良いことだと思います。私はよく分からないけど、サブクラステーブルは、独自のIDを持っている必要があります。 CARがリストであるので、それは値が同じ「ドメイン」からのものであること理にかなっています。

は、典型的なクラシファイド広告サイトでは、広告のためのデータが一度書き込まれ、基本的に読み取り専用です。あなたはこれを活用し、より多くのユーザーが検索したいだけの方法で検索するために最適化されたテーブルの第二セットにデータを格納することができます。また、探索問題は本当に「一般」の検索のために存在します。ユーザーが広告の特定の種類を選ぶたら、あなたは(RAM> 4ギガバイト、CPU =取り押さえ)より高度な検索を行うためには、サブクラステーブルに切り替えることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top