1

プロジェクトの友情システムを作成します。ユーザーの行の列に友達を保存するか、友達テーブルを作成してユーザーIDを使用してそこに保存するかを決定できませんでしたか?どの使用法が優れているかを明確にするには:

ユーザーテーブルはこのようにする必要がありますか?

+-----------+-----------+---------------+
+    id     + username  +    friends    +
+-----------+-----------+---------------+
+    11     + user_x    + 12;23;15;3;7  +
+-----------+-----------+---------------+

<?php explode(';',$friends); ?>

また; このような友達テーブルを作成できますか?

+-----------+-----------+---------------+
+    id     +   user    +     friend    +
+-----------+-----------+---------------+
+    1      +    11     +       12      +
+-----------+-----------+---------------+
+    2      +    11     +       23      +
+-----------+-----------+---------------+
+    3      +    11     +       15      +
+-----------+-----------+---------------+
+    4      +    11     +       3       +
+-----------+-----------+---------------+
+    5      +    11     +       7       +
+-----------+-----------+---------------+

SELECT friend FROM friends WHERE user = 11

どちらがいいですか?ありがとうございました

4

3 に答える 3

1

後者。それはあなたにはるかに多くの柔軟性を可能にします。

友達を削除したり、友達の数を数えたり、2人の人を見て、彼らが共通して持っている友達を確認したりする場合を想像してみてください。最初のシステムではそうではなく、2番目のシステムではすべてが些細なことです。

于 2010-08-12T10:05:46.433 に答える
1

2つ目は、はるかに柔軟性があります。たとえば、「友だちになった人」を簡単に照会できます。友だちを解除するには、文字列を操作するのではなく、1つの行を削除するだけです。友達の数などの統計を簡単に生成できます...

それがあなたにとって重要であるならば、あなたはまだ最初のオプションの効果を達成することができます。GROUP_CONCATを使用して、リスト内のすべての友達IDを取得します。

 SELECT id,foo,bar,GROUP_CONCAT(friend_id) as friends 
 FROM user 
 LEFT JOIN friends ON(user.id=friends.user)
 GROUP BY user.id;
于 2010-08-12T10:05:52.753 に答える
0

それはあなたの使用法に依存します。友達のリストを表示するだけで、それを検索しない場合(たとえば、14は11の友達ですか?)、おそらく最初のリストで十分かもしれません。削除または挿入するには、最初に友達リストを取得して変更し、次にレコードを新しいリスト全体で更新する必要があります。

ただし、その単純な使用法以外の場合、ユーザーと友人の両方が適切にインデックス付けされている限り、2番目の使用法ははるかに柔軟です。

于 2010-08-12T10:08:01.670 に答える