私は、ユーザーが販売しているさまざまな種類のアイテムの詳細なフィールドを含む求人広告を投稿できるWebサイトをプログラミングしています。ただし、最適なデータベーススキーマについて質問があります。
このサイトには多くのカテゴリ(自動車、コンピュータ、カメラなど)があり、広告の各カテゴリには独自のフィールドがあります。たとえば、車にはドアの数、メーカー、モデル、馬力などの属性があり、コンピューターにはCPU、RAM、マザーボードモデルなどの属性があります。
これらはすべてリストであるため、さまざまなカテゴリ(COMPUTERS、CARS、CAMERAS)ごとに親LISTINGSテーブルと異なる子テーブルを作成する多態的なアプローチを考えていました。各子テーブルには、LISTINGSTABLEにリンクするlisting_idがあります。したがって、リストがフェッチされると、関連付けられた子テーブルのリンクされた行によって結合されたLISTINGSから行がフェッチされます。
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のようなサイトはどのようにそれを行いますか?