3

クラシファイド広告 Web アプリケーションをコーディングしています。アプリケーションには、いくつかのタイプの広告があります。

  1. 一般広告(電化製品、おもちゃ、ペット、本など)
  2. 不動産(住宅、アパート、地形...)
  3. 乗り物(オートバイ、乗用車、バン、トラックなど)

各タイプには、いくつかの共通フィールド (id、タイトル、説明) と、その種類専用のフィールドがあります。

  1. 一般広告 (専用フィールドなし)
  2. 不動産(面積、物件の種類...)
  3. 車両 (車両の種類、排気量、キロメートル...)

この状況で最も推奨されるアプローチは何ですか?


  • すべてのフィールドを含み、現在のレコードセットに適用されないフィールドを空のままにするテーブル。
  • すべての広告に共通のフィールドを持つメイン テーブルと、排他的なフィールドを持つ各タイプの広告用の追加テーブル。
  • 広告の種類ごとに 1 つのテーブル。
  • 他の

これは私の最初のプロフェッショナルな PHP/MySQL アプリです。質問が基本的すぎる場合はご容赦ください。私が実装したソリューションが最適であることを確認したいだけです。推奨するソリューションを実装する理由と方法について説明してください。

4

5 に答える 5

2

さまざまな基準に応じてソリューションを構築します。

  • 将来テーブルが大きくなると思われる場合 (多数の広告が公開される場合)、パフォーマンスを向上させるために JOIN の数を最小限に抑えることをお勧めします => オプション 1.「広告タイプに関連しない場合、空のフィールドを持つ 1 つのテーブル"

  • 前のコメントは、特にデータ ストレージ コストが低い場合に当てはまります。

  • 特定のフィールド値 (家のサイズ、車のキロメートルなど) に対してデータをクエリする必要がある場合は、SQL 構文が悪夢になるため、phpalix (ad_type | property | value) または Andy Gee によって説明されているソリューションを避けることができます。すべてのデータを同じテーブルに入れます(再び)。

  • 広告タイプごとに大量のカスタム フィールドがある場合は、メンテナンスとデータ ストレージの最適化を容易にするために、各広告タイプを独自のテーブルに分けることをお勧めします。次に、JOIN または UNION のいずれかを使用して、広告リストを照会できます。

他に何か思いついたら、回答に追加します。

于 2013-02-05T13:30:57.940 に答える
1

正規化(抽象的な概念のテーブルと特殊な概念のテーブル)または非正規化(すべてのフィールドを含むテーブル)を行うことができます。

いつものように、選択は各ソリューションのコストに応じて行う必要があり、クエリの速度で表されます(正規化されたモデルはより多くの結合(バッファ/ CPU)を意味しますが、非正規化されたより多くのディスク読み取りは通常、そうでないときに列が取得されることがあるためです必要)または両方の場合に必要なストレージ。

于 2013-02-05T13:18:43.323 に答える
1

すべてのソリューションは受け入れ可能であり、好み、パフォーマンス、複雑さ、および設計上のニーズの問題です。あなたが話していることの用語は、Table-Per-Type、Table-Per-Class、および Table-Per-Hierarchy です。これらをググると、大量の Entity Framework の結果が得られることが保証されますが、基本的な設計上の考慮事項はほとんど同じです。

于 2013-02-05T13:20:57.043 に答える
1

柔軟性を持たせるために、すべてのフィールドを別のテーブルに配置し、各フィールドを各広告タイプに割り当てることができるようにします。これにより、後でフィールドを簡単に追加および削除することもできます。各フィールドには異なるタイプのデータが含まれている可能性があるため、この情報も別のテーブルにある必要があります。

このようなもの(あまり明確でなく申し訳ありません)

Table: fields
field_id, field_type, field_name
1         1           title
2         1           price
3         2           size
4         3           description
5         1           square meters

Table: field_types
field_type_id, type
1,             textbox
2,             select_box
3,             text_area

Table: field_data
field_data_id, ad_id, field_id, field_type_id, field_data
1              1      1         1              Cool t-shirt
2              1      2         1              5.99
3              1      3         2              L,XL,XXL,XXXL
4              1      4         3              Some description
5              2      1         1              Nice house
6              2      2         1              250000
7              2      4         3              Some description
8              2      5         1              1024sq/m

Table: ad_types
ad_type_id, ad_type_name, fields
1           general       1,2,3,4
2           real_estate   1,2,4,5
于 2013-02-05T13:35:54.377 に答える
0

値を行ではなく列に格納するため、テーブルを作成し、ad_type、property、value の 3 つの列を作成します。

広告の各タイプのプロパティを定義し、そのフィールドの広告タイプをクエリします。

それが役立つことを願っています

于 2013-02-05T13:14:27.337 に答える