【问题标题】:How should I design my PosgreSQL database to accommodate Private, Group, and Public Chat?我应该如何设计我的 PostgreSQL 数据库以适应私人、群组和公共聊天?
【发布时间】:2019-03-01 17:23:21
【问题描述】:

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

  • 普通聊天 - (任何人和所有人)
  • 私人聊天 -(2 位用户之间)
  • 群聊 -(3 个以上用户)

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

什么是好的设计/架构可以让我拥有这些功能?

现在我有一个看起来像这样的架构:

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 的用户表。我需要更多的桌子吗?

【问题讨论】:

  • 你在问什么广泛和避免使用像id这样的列名更好roomID。而且你需要知道这3个聊天中有什么要求general,group,private
  • 抱歉,我无法理解您所写的内容,请您改写一下吗?
  • 你有表 ChatMessagesChatRooms 的主键 id 不好命名,最好用 id 作为最后一个字母来表示表名,我说广泛,因为你有 3 个聊天或表 general,group,private 你需要知道你需要的要求。
  • 我认为你根本不明白我的问题......

标签: sql postgresql database-design chat


【解决方案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的以下用户的信息。

我希望这就是你要找的。​​p>

【讨论】:

    猜你喜欢
    • 2011-09-10
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 2014-10-01
    • 2012-03-16
    • 1970-01-01
    相关资源
    最近更新 更多