これはおそらく何百万回も尋ねられていることは知っていますが、私にとって明確なものは何も見つかりません. アイテムのリストを作成できるユーザーが参加する Web サイトを作成しています。項目を SQL テーブルに格納するための最良の方法は何でしょうか?
配列を保存する方法が見つからないため、ユーザーごとに個別のテーブルを作成する必要があると考えています。しかし、これは非効率的だと思います。
「アイテム」が何であるかに応じて、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で外部キー制約を作成しません(エラーなしで実行されますが)。態度。外部キーは個別に定義する必要があります。