3

各ユーザーの画像を保存しているかどうかを知りたいのですが、各画像をデータベースのフィールドにする必要がありますか? 各ユーザーが 10 枚の写真をアップロードできると仮定すると、データベースに imagname 1 、 imagname 2 などのフィールドを作成する必要があるということですか?

4

7 に答える 7

8

確かにそうではありません。これは、リレーショナル データベースの使用方法ではありません。代わりに、ユーザー用と画像用の 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';

于 2013-01-02T13:21:26.220 に答える
3

MySQL のようなリレーショナル データベース システムでは、 と の 2 つのテーブルがusersありusers_imagesます。ユーザーがアップロードする画像ごとに、画像のファイル名とユーザーの ID を外部キーとしてテーブルにINSERT記録します。users_images

ユーザーがアップロードできる画像は 10 個までという制限が必要な場合、このロジックはアプリケーションに属します。

于 2013-01-02T13:22:05.763 に答える
1

さらに良いことに、クエリするテーブル列にインデックスを追加します(これにより、巨大なデータテーブルのパフォーマンスが向上します)。一意のIDで画像を挿入し、ユーザーにタグ付けする必要があります。

ユーザーごとに複数の画像を追加する場合は、画像、ユーザー、ユーザー画像テーブルを用意することをお勧めします。

正規化されたテーブルスキーマのデモ用。

于 2013-01-02T13:24:10.547 に答える
1
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 つの画像をデフォルトのプロフィール画像として保存し、その他の画像を画像テーブルに保存できます。

于 2013-01-02T13:27:23.650 に答える
0

正規化がどのように機能するかを理解する必要があります。あなたの場合、ユーザーはImageと1-*の関係にあります。したがって、2つのテーブルを設計できます。1。ユーザー2.ユーザーテーブルのユーザーIDを参照するユーザーIDを持つイメージテーブル

于 2013-01-02T13:24:55.257 に答える
0

いいえ。ユーザーの一意のIDを追加して、画像がこのIDに関連付けられ、後でクエリを実行するときに、ユーザーID =何かを持つ画像を選択するだけです

于 2013-01-02T13:21:52.893 に答える
0

絶対にありません。外部キーを使用する必要がある2つのテーブルが必要です。mysql を使用している場合は、両方のテーブルを InnoDB エンジンに変更することを忘れないでください。1 つのテーブルは ID を持つ別のテーブルを参照する必要があり、それらの ID のすべてのデータ型は最初のテーブルと 2 番目のテーブルで同じでなければなりません。@arkascha が提供した例を見てください。これは非常に良い例です。

于 2013-02-07T08:14:53.863 に答える