友達リストをデータベースに保存するロジックを楽しみにしています。私はユーザーIDを持つ配列に物事を追加することを考えています
例:friendsテーブルのuser aの配列には、1,2,4,6,77,44などのfriendsのuserid配列が含まれます。
これが効率的な方法になるかどうか知りたいです。そうでない場合、大規模なコミュニティに理想的に実装する必要があるロジックは何ですか?
友達リストをデータベースに保存するロジックを楽しみにしています。私はユーザーIDを持つ配列に物事を追加することを考えています
例:friendsテーブルのuser aの配列には、1,2,4,6,77,44などのfriendsのuserid配列が含まれます。
これが効率的な方法になるかどうか知りたいです。そうでない場合、大規模なコミュニティに理想的に実装する必要があるロジックは何ですか?
個別の多対多結合テーブルが必要になる可能性があります。これを実現するには、ユーザーとその友達の両方が同じユーザーテーブルに存在する場合。テーブルは次のようになります。
user_id-フレンドルックアップが実行されているユーザーのID、ユーザーテーブルのuser_idフィールドへの外部キーfriend_id-ユーザーに関連付けられたフレンドのID、ユーザーテーブルのuser_idフィールドへの外部キー
両方のフィールドに複合主キーがあり、user_idとfriend_idの各組み合わせが一意であることを確認します。
これは、CREATETABLEステートメントのサンプルです。
CREATE TABLE `friends` (
`user_id` INT(11) NOT NULL,
`friend_id` INT(11) NOT NULL,
PRIMARY KEY (`user_id`, `friend_id`)
)
ENGINE = INNODB;
また、サンプルデータは次のようになります。
INSERT INTO `friends` (`user_id`, `friend_id`)
VALUES
(1, 2), (1, 3), (1, 4), (2, 1), (2, 10), (4, 1), (4, 20);
次に、特定のユーザー(つまり、ログインしているユーザー)に関連付けられている友達のすべてのユーザーテーブルデータのルックアップを実行したいとします。次のようにそのデータをクエリできます。
SELECT users.*
FROM users
INNER JOIN friends ON users.user_id = friends.friend_id
WHERE friends.user_id = [The ID of current user]
ダメダメダメ!
1つのdbフィールドに複数の値を格納しないでください。それはあなたに非常に多くの問題をもたらすでしょう。
たとえば、このような構造を使用できます
friends (user_id, user_id)
これは2人の友達を示しています。