私の質問は例よりも一般的ですが、アイデアを説明する唯一の方法はサンプルを使用することだと思います。
チャットアプリケーション用のデータベースを作成したいとします。トピックのリストがあります。一度に4人のユーザーの「部屋」。
「ベートーベン」というトピックがあるとしましょう。ユーザーがそのトピックを選択すると、部屋が取得または作成されます。4人のユーザーがその部屋に参加すると、部屋の別のインスタンスが作成され(同じトピック)、別のインスタンスが作成されるまでに最大4人のユーザーが追加されます。最初のルームインスタンスのユーザーが離れると、そのスロットは開いているため、トピックに参加する9番目のユーザーが最初のルームインスタンスに送信されます。
これを管理するための最良の方法は何ですか?私には2つのアイデアがあります:
- 「トピック」テーブル:id、label
- 「部屋」テーブル:id、topicId
- 「人口」テーブル:roomId、userId
ユーザーがトピックを選択/参加すると、次のようになりSELECT COUNT(userId) FROM Population WHERE topicId = <id>
ます。カウントが4より大きい場合は、新しいルームを作成し、それを挿入して、挿入IDを返します。ユーザーが部屋を離れると、Populationのその行は削除されます。
または...
- 「トピック」テーブル:id、label
- 「部屋」テーブル:id、topicId、user1、user2、user3、user4。
次に、ユーザーが参加すると、次のようになります。SELECT id FROM Rooms WHERE ISNULL(user1) OR ISNULL(user2) OR ISNULL(user3) OR ISNULL(user4) LIMIT 1
一致する行がない場合は、新しいRoomを挿入し、挿入IDを返します。ユーザーが部屋を離れると、その列はNULLに設定されます。
TYIA。