我应该如何设计我的 PostgreSQL 数据库以适应私人、群组和 Public 聊天?

How should I design my PosgreSQL database to accommodate Private, Group, and Public Chat?

我正在创建一个小型消息传递应用程序,用户可以在其中将消息发送至:

我对数据库设计还是个新手,想了解如何设计我的数据库。

什么是好的 design/schema 让我拥有这些能力?

现在我的架构如下所示:

CREATE TABLE ChatRooms (
id serial PRIMARY KEY,
);


CREATE TABLE ChatMessages (
id serial PRIMARY KEY,
roomID FOREIGN KEY NOT NULL,
message VARCHAR(100),
senderID FOREIGN KEY NOT NULL, 
time TIMESTAMP
);

当然还有一个用户 table 和 userID。我还需要 table 吗?

我建议的设计:

**ChatRooms**        **ChatMessages**    **ChatUsers**
room_id              id                  user_id
serial               room_id             room_id
type (0/1/2)         sender_id           added_on (timestamp)
users (user count)   text
                     time (timestamp)

现在 "type" 将指示房间是普通 (0)、群组 (1) 或私人 (2) 的天气。 每当用户加入聊天室时,他们的信息将被添加到具有特定聊天室 ID 的 ChatUsers table,并且当他们离开该聊天室时,该行将从 ChatUsers table 中删除。 ChatUsers table 的好处是,当您显示房间中的总用户数时,您不必计算 ChatUsers table 中的所有行,而只需从 ChatRooms table 中选择值] 列 'users' 等于 ChatUsers table 中特定房间的行数,每次向 ChatUsers table 添加一行时,您都需要增加房间的用户列,同时减少当房间的 id.You 删除一行时,也可以通过从 'room_id' 列中具有特定房间 ID 的行中选择 'user_id' 列值来显示房间中用户的信息然后从用户 table.

中检索具有这些 id 的以下用户的信息

希望这就是您要找的。