我正在创建一个小型消息传递应用程序,用户可以在其中将消息发送至:
我还是数据库设计的新手,想对如何设计数据库有一些见解。
什么能让我拥有这些功能的良好设计/架构?
现在我有一个看起来像这样的模式:
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
);
还有一个带有用户ID的User表。我还需要更多桌子吗?
答案 0 :(得分:1)
我建议的设计:
**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)
现在“类型”将指示房间是general(0),group(1)还是private(2)的天气。 每当用户加入聊天室时,他们的信息都将使用特定的聊天室ID添加到ChatUsers表中,并且当他们离开该聊天室时,该行将从ChatUsers表中删除。 ChatUsers表的好处是,当您将显示一个房间中的总用户时,您不必计数ChatUsers表中的所有行,而只需从“用户”列的ChatRooms表中选择与行相等的值即可。在ChatUsers表中特定房间的数量时,每次将行添加到ChatUsers表中时,您需要增加房间的用户列;当删除具有该房间ID的行时,也需要减少该房间的用户列。您还可以显示房间中用户的信息通过从“ room_id”列中具有特定房间ID的行中选择“ user_id”列值,然后从用户表中检索具有这些ID的以下用户的信息。
我希望这就是您想要的。