0

mySQL テーブルをセットアップするのに最適な方法についていくつか入力した後です。

問題のテーブルは、私のサイトに掲載された広告に関する情報を格納するテーブルです。ほとんどの列はシンプルで、価格、送信者のユーザー ID、送信日などの通常の情報がすべて含まれています。

私が問題を抱えている部分は写真です。広告には、最小 1 枚から無制限の可能性がある写真まで、任意の数の写真を追加できます (ただし、ある時点で上限を設定しますが、現実的には最大 40 枚まで可能です)。

現在、1 つの「写真」列があり、そこにすべての写真のパスをコンマで区切って保存しています。

まず、これはベストプラクティスではないと言われました。

また、サイトの「削除」ボタンを使用してリストから 1 枚の写真を削除するのはかなり長くなります。カンマ区切りのリストを取得して展開し、削除したい画像に一致するビットを見つけて削除し、リストをまとめて同じフィールドに再度挿入する必要があります。

おそらく、答えは各写真の列であり、必要に応じて動的に作成されますか? しかし、これがどのように機能するかはわかりません.列を追加するコードの観点から(挿入時にphpを介して)、1行には30枚の写真があり、別の行には1枚しかないため、1行には29枚の空があります列?これは悪いですか?

4

2 に答える 2

1

これがいわゆる1 対 n の関係です。おっしゃる通り、あなたがとっているアプローチは良いものではありません。将来、多くの頭痛の種になるでしょう。「データベースの正規化」を Google で簡単に検索すると、このトピックに関する多くの情報が見つかります。必読のもの。

photosあなたのアプローチ:広告テーブルから列を削除し、追加のads_photosテーブルを導入します。ad_idそのテーブルには、写真が属する広告を参照する列とurl、写真の URL を含む列のようなもの、少なくとも 2 つの列があります。

これにより、任意の数の写真を特定の広告に関連付けることができます。InnoDB テーブルを使用して、テーブル間の「実際の」外部キー関係を使用できるようにすることをお勧めします。

于 2013-02-21T18:29:33.760 に答える
1

各写真の列の代わりに、写真のテーブルを試してみませんか:

TB_PHOTO id (INT) パス (VARCHAR) userId (ユーザーのテーブルを参照)

次に、写真のデータと必要なすべての写真を取得できます。例えば

select path from TB_PHOTO where userId='?';

そして、特定のユーザーに属するすべての写真を取得します.

于 2013-02-21T18:31:39.383 に答える