0

私はMySQLを初めて使用し、基本的な機能のほとんどとクエリの送信方法などを知っています。ただし、ユーザー情報の最適な検索のために構造化することについて学び、いくつかのアイデアを得たいと思っていました.

現在、ユーザー情報を保持する user_info と呼ばれる 1 つのテーブル (機能目的とテスト用) と、ユーザーにリンクされた写真を格納する別のテーブルがあります。理想的には、この情報のほとんどにできるだけ早くアクセスできるようにしたいと考えています

主にユーザー情報 (名前、年齢、電話番号、メッセージなど) を格納および取得するために使用されるデータベースを作成する場合、すべての情報を格納する新しいユーザーごとに新しいテーブルを作成して、1 つのテーブルを作成することをお勧めします。 user_info は、複数のクエリやロックなどによって行き詰まることはありません。したがって、たとえば、ユーザー john smith は、データベースに自分のテーブルを持ち、写真やメッセージなどのすべての情報を保持します。

また

user_info、user_photos、user_messages など、いくつかのテーブルを用意した方がよいでしょうか。この方法でデータにアクセスします。

ユーザーのメールアドレスが複数回繰り返されるなど、テーブルの冗長性については心配していません。

4

3 に答える 3

1

後者が最善の方法です。ユーザー用に 1 つのテーブルを宣言し、必要なデータを含むいくつかの列を宣言します。

ユーザーに写真が必要な場合は、写真を含む新しいテーブルと、ユーザー テーブルのPrimary Keyにリンクする外部キー属性が必要になります。

于 2012-07-27T02:42:20.250 に答える
1

ユーザーごとに新しいテーブルを作成しないでください。各ユーザーが多くの写真を持つことができる場合は、user_info 用に 1 つのテーブルを作成し、写真用に 1 つ作成します。メッセージ テーブルには、おそらく 2 つの user_id 列 (user_to、user_from) とメッセージ列が含まれます。可能な限りデータを正規化してください。

Users
====
id
email
etc

Photos
====
id
user_id
meta_data
etc

Messages
====
id
user_id_to
user_id_from
message
timestamp
etc
于 2012-07-27T02:42:32.710 に答える
0

ここで提供された両方の回答に同意しますが、まだ言及されていないことの1つはルックアップテーブルです。

ここでの一般的な例では、次のことを考慮してください: users テーブルと photos テーブルがあります。ここで、ユーザーが他のユーザーの写真を「お気に入り」にできる機能をサイトに導入したいと考えています。

「お気に入り」と呼ばれる新しいテーブルを作成し、画像に関するすべてのデータ (フィールドの場所、メタデータ、スコアなど) をもう一度追加するのではなく、他の 2 つのテーブルの間に効果的に配置するテーブルを作成します。

+-----------------------+      +-------------------------------------+
| ++ users              |      | ++ photos                           |
| userID | email | name |      | photoID | ownerID | fileLo | etc... |
+--------+-------+------|      +---------+---------+--------+--------+
| 1      | ....  | Tom  |      | 35      | 1       | .....  | .......|
| 2      | ....  | Rob  |      | 36      | 2       | .....  | .......|
| 3      | ....  | Dan  |      | 37      | 1       | .....  | .......|
+--------+-------+------+      | 43      | 3       | .....  | .......|
                               | 48      | 2       | .....  | .......|
                               | 49      | 3       | .....  | .......|
                               | 53      | 2       | .....  | .......|
                               +---------+---------+--------+--------+

+------------------+
| ++ Favs          |
| userID | photoID |
+--------+---------+
| 1      | 37      |
| 1      | 48      |
| 2      | 37      |
+--------+---------+

このアプローチを使用すると、データの複製をあまり行わずに、所有しているデータをクリーンかつ効率的にリンクできます。

于 2012-07-27T03:43:53.087 に答える