8

これはおそらく何百万回も尋ねられていることは知っていますが、私にとって明確なものは何も見つかりません. アイテムのリストを作成できるユーザーが参加する Web サイトを作成しています。項目を SQL テーブルに格納するための最良の方法は何でしょうか?

配列を保存する方法が見つからないため、ユーザーごとに個別のテーブルを作成する必要があると考えています。しかし、これは非効率的だと思います。

4

2 に答える 2

12

「アイテム」が何であるかに応じて、2 つの解決策が考えられます。

  1. ユーザーとアイテムの間の一対多の関係
  2. ユーザーとアイテムの間の多対多の関係

1 つのアイテム (「書籍」など) を複数のユーザーに「割り当てる」ことができる場合は、2) です。各アイテムが一意で、1 人のユーザーにのみ属することができる場合、それは 1) です。

一対多の関係

create table users
(
   user_id    integer primary key not null,
   username   varchar(100) not null
);

create table items
(
   item_id    integer primary key not null,
   user_id    integer not null references users(user_id),
   item_name  varchar(100) not null
);

多対多の関係:

create table users
(
   user_id    integer primary key not null,
   username   varchar(100) not null
);

create table items
(
   item_id    integer primary key not null,
   item_name  varchar(100) not null
);

create table user_items
(
    user_id   integer not null references users(user_id),
    item_id   integer not null references items(item_id)
);

あなたの非常にあいまいな説明のために、これが私が考えることができる最高のものです.

配列などを使用する必要はありません。あなたはデータベース モデリングに不慣れなようですので、正規化についてよく読んでください。「配列」について考えるたびに、おそらく「テーブル」(または関係) について考えていることでしょう。

編集(MySQLについて言及したのを見ました):
上記のSQLは、MySQLの愚かな「何かできないかどうかはわかりません」ため、MySQLで外部キー制約を作成しません(エラーなしで実行されますが)態度。外部キーは個別に定義する必要があります。

于 2013-01-03T14:50:21.883 に答える