2

製品を含む製品テーブルがあります。各商品には複数の画像を含めることができます。画像の URL/ID はデータベースに保存されます。image_url1ここで、製品テーブルに、 などの列を作成する代わりにimage_url2、製品テーブルの画像のリストを含むシリアル化されたデータを という 1 つの列に格納することをお勧めしますimage_url

それとも、別のproduct_image関係テーブルを作成し、そこに製品 ID と画像 ID/URL を格納する方がよいでしょうか?

どちらの方法でもうまくいくと確信していますが、ベストプラクティスを採用したいと考えています。

注: 製品ごとの画像の数は異なります。画像がない商品もございます。

編集:私の質問により具体的な詳細を追加するには。画像の URL は検索には使用されません。商品が表示されているときに画像の URL を取得するためだけに使用されます。

4

4 に答える 4

2

ベスト プラクティスは特効薬ではありません。広範であれ狭義であれ、常に特定の状況に最適です。

画像のリストをループするだけなら、害はありません。ただし、特定の画像を編集または検索する場合は、私はしません。他の選択肢 (名前付きの画像フィールド) の代わりに、画像が属する製品への外部キーを持つ別のテーブルに画像を配置してみませんか。

または、それらすべてを 1 つのフィールドに詰め込む必要がある場合は、データベースの XML 機能を調べることができます。私は、xml ドキュメント内の多くのフィールドをエンコードし、それをデータベース内のフィールドとして格納してから、XPath を使用して検索することでいくつかのことを行いました。データベース ベンダーによって実装される XPath 関数のレベルに依存しますが、私の場合は非常にパフォーマンスが高く、同じクラスのオブジェクトのさまざまな種類を同じテーブルに格納できます。

于 2012-04-13T15:28:07.233 に答える
2

多くの人は、リストを 1 つのフィールドに格納すると、リレーションシップ データベース エンジン (または何でも) の要点が失われると言うでしょう。

ただし、そのフィールドで検索する必要がない場合(あなたの場合、画像のURLを取得して画像を所有する製品を見つける必要がない場合)、またはフィールドが制約を受けることはありません(たとえば、同じ画像が 2 回使用されないようにする必要はありません)、データを 1 つのフィールドにダンプしない理由はありません。

于 2012-04-13T15:23:36.090 に答える
1

別のテーブルを使用することをお勧めします。データを 1 つのフィールドにシリアル化することはできますが、お勧めできません。

別の言語でデータベースにアクセスする必要がある場合はどうでしょうか。PHP のシリアライズされたオブジェクトをデシリアライズすることはできますか? (番号)

シリアル化されたデータを使用するには、さらに多くのコードが必要になります。

画像の例を削除する

別表:

delete from product_images where product_image_id = 4

シリアル化されたデータ:

  • データベースからシリアル化されたデータを取得します。
  • 配列またはオブジェクトに逆シリアル化します。
  • データをループして、必要なものを見つけます。
  • リストから削除します。
  • 変更されたリストをシリアル化し、データベースに保存します。
于 2012-04-13T15:33:21.240 に答える
0

images テーブルに列「product_id」を作成します。

于 2012-04-13T15:24:48.533 に答える