各ユーザーの画像を保存しているかどうかを知りたいのですが、各画像をデータベースのフィールドにする必要がありますか? 各ユーザーが 10 枚の写真をアップロードできると仮定すると、データベースに imagname 1 、 imagname 2 などのフィールドを作成する必要があるということですか?
7 に答える
確かにそうではありません。これは、リレーショナル データベースの使用方法ではありません。代わりに、ユーザー用と画像用の 2 つのテーブルを使用します。images テーブル内で列を使用して、users テーブル内にユーザー ID を格納します。そうすれば、ユーザーごとに必要な数の画像を保存でき、結合クエリを使用してすべての画像をクエリできます。
だから、このようなもの:
CREATE TABLE users (
user_id int(11) auto_increment NOT NULL PRIMARY KEY,
name VARCHAR(1024) NOT NULL
);
CREATE TABLE images (
img_id int(11) auto_increment NOT NULL PRIMARY KEY,
user_id int(11) NOT NULL,
image blob
);
次のようなものを使用して、ユーザーの画像のリストを取得できます。SELECT img_id FROM images LEFT JOIN users ON (images.user_id=users.user_id) WHERE users.name='some one';
MySQL のようなリレーショナル データベース システムでは、 と の 2 つのテーブルがusers
ありusers_images
ます。ユーザーがアップロードする画像ごとに、画像のファイル名とユーザーの ID を外部キーとしてテーブルにINSERT
記録します。users_images
ユーザーがアップロードできる画像は 10 個までという制限が必要な場合、このロジックはアプリケーションに属します。
さらに良いことに、クエリするテーブル列にインデックスを追加します(これにより、巨大なデータテーブルのパフォーマンスが向上します)。一意のIDで画像を挿入し、ユーザーにタグ付けする必要があります。
ユーザーごとに複数の画像を追加する場合は、画像、ユーザー、ユーザー画像テーブルを用意することをお勧めします。
正規化されたテーブルスキーマのデモ用。
Table User
------------------------------
User Id | User Name | Image
------------------------------
1 | Example | image id (for default image)
------------------------------
Table Images (With User Id as FK)
-----------------------------------------
Image Id | User Id (FK) | Image name
-----------------------------------------
1 | 1 | imagename
-----------------------------------------
テーブル ユーザーでは、1 つの画像をデフォルトのプロフィール画像として保存し、その他の画像を画像テーブルに保存できます。
正規化がどのように機能するかを理解する必要があります。あなたの場合、ユーザーはImageと1-*の関係にあります。したがって、2つのテーブルを設計できます。1。ユーザー2.ユーザーテーブルのユーザーIDを参照するユーザーIDを持つイメージテーブル
いいえ。ユーザーの一意のIDを追加して、画像がこのIDに関連付けられ、後でクエリを実行するときに、ユーザーID =何かを持つ画像を選択するだけです
絶対にありません。外部キーを使用する必要がある2つのテーブルが必要です。mysql を使用している場合は、両方のテーブルを InnoDB エンジンに変更することを忘れないでください。1 つのテーブルは ID を持つ別のテーブルを参照する必要があり、それらの ID のすべてのデータ型は最初のテーブルと 2 番目のテーブルで同じでなければなりません。@arkascha が提供した例を見てください。これは非常に良い例です。