0

私のサイトには、ユーザーがメッセージを書いて他のユーザーに送信できるエリアがあります。そのメッセージは、メッセージの作成者によって指定されたユーザーのみが表示できます。だから私は 2 つのテーブルを作成しました:Message_Authormessage_Receiversの共通の列を与えますmessageID。投稿されたメッセージごとに、1 つのエントリがMessage_ Author

$db->query("
            INSERT INTO Message_Author
            VALUES('$message_id',$_SESSION[email],$message)
           ");   

そして Message_Receivers に:

foreach($receiversUserNameArray as &$value){

   $db->query("
               INSERT INTO Message_Receivers
               VALUES('$message_id',$value)
              ");
}

これで、メッセージの作成者によって指定されたすべてのユーザーが、そのメッセージ ID を持つメッセージを表示できるようになります。問題は、ユーザーが「すべての連絡先に送信」したい場合です。これは、数百のユーザー名になり、それぞれの行が多くのデータベース スペースを占める可能性があります。受信者ごとに行を作成せずに、これら 2 つのテーブル間で messageID をリンクするより良い方法はありますか?

4

2 に答える 2

1

そこにメモリを保存することはできません。

挿入され$message_id$value両方ともINT別のテーブルからIDを参照しているだけだと思います。したがって、メッセージが何百人ものユーザーに表示される場合、テーブルにはそのメッセージの何百もの行がありますMessage_Receiversが、代替手段は何ですか? 単一のユーザーではなくグループにリンクされたメッセージを作成できると想像することしかできませんでした (ユーザーが同じグループの人々に複数回メッセージを送信すると仮定すると、これにより実際にメモリが節約される可能性がありますが、それらのグループを保持するためだけに別のテーブルを実装する必要があります) )。

要するに、いいえ、あなたはすでに正しい方法でそれを行っています。両方の列が1行の列あたり4バイトINTになる場合、データの増加をあまり恐れません。したがって、1行あたり8バイトに数を掛けます数百はまだメガバイトに近くありません。

于 2013-10-16T13:31:00.510 に答える
1

これには message<>user テーブルを使用するのが適切な方法ですが、メッセージとユーザーの両方に数値 ID を使用する方がよい場合があります。レイアウトは理想的には次のようになります。

User: UserID, UserName, UserEmail, ...
Message: MessageID, Message
Message_Author: UserID, MessageID
Message_Receivers: UserID, MessageID

Message_Author と Message_Receivers を一緒にロールすることも価値があるかもしれませんが、最終的に SQL では、データムごとに 1 つの行を持つことが全体のアイデアです。この場合、メッセージとユーザーを接続しようとしているため、接続ごとに 1 つの行が非常に論理的です。 . 数値 ID を使用すると、これらの接続がスペースを使いすぎないようにすることもできます。

于 2013-10-16T13:30:36.747 に答える