我应该如何设计我的 PostgreSQL 数据库以适应私人、群组和 Public 聊天?
How should I design my PosgreSQL database to accommodate Private, Group, and Public Chat?
我正在创建一个小型消息传递应用程序,用户可以在其中将消息发送至:
- 一般聊天 -(任何人和所有人)
- 私人聊天 -(2 位用户之间)
- 群聊 -(3 个以上用户)
我对数据库设计还是个新手,想了解如何设计我的数据库。
什么是好的 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 的以下用户的信息
希望这就是您要找的。
我正在创建一个小型消息传递应用程序,用户可以在其中将消息发送至:
- 一般聊天 -(任何人和所有人)
- 私人聊天 -(2 位用户之间)
- 群聊 -(3 个以上用户)
我对数据库设计还是个新手,想了解如何设计我的数据库。
什么是好的 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 的以下用户的信息希望这就是您要找的。