Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-聊天数据库模式,用于删除一方或双方的会话_Sql_Chat - Fatal编程技术网

SQL-聊天数据库模式,用于删除一方或双方的会话

SQL-聊天数据库模式,用于删除一方或双方的会话,sql,chat,Sql,Chat,我正在设计一个聊天数据库,其中包含以下要求: 只有私人信息,A到B。没有群组或房间 当用户A向B发送消息时,如果用户A删除对话,则用户B仍然能够查看该对话,直到用户B将其删除 消息不能单独擦除。只能删除完整的历史记录对话 现在我有了这个: 当用户A向用户B发送消息时,将创建一个带有id的消息寄存器。这将是会话表的外键 在对话表中,将为相同的消息id创建两个寄存器。一个用于发送消息的用户,另一个用于接收消息的用户。每个寄存器都有一个名为in-out的字段,其中指定消息是发送还是接收的。例如:

我正在设计一个聊天数据库,其中包含以下要求:

  • 只有私人信息,A到B。没有群组或房间
  • 当用户A向B发送消息时,如果用户A删除对话,则用户B仍然能够查看该对话,直到用户B将其删除
  • 消息不能单独擦除。只能删除完整的历史记录对话
现在我有了这个:

  • 当用户A向用户B发送消息时,将创建一个带有id的消息寄存器。这将是会话表的外键
  • 在对话表中,将为相同的消息id创建两个寄存器。一个用于发送消息的用户,另一个用于接收消息的用户。每个寄存器都有一个名为in-out的字段,其中指定消息是发送还是接收的。例如:
/*
对话\u表消息\u表
+--------------------------------------------+  +----------------------------------------+
|用户id |参与者id |输入输出|消息id |消息id |正文|
+--------------------------------------------+  +----------------------------------------+
|A | B | 0 | 101 | 101 |你好B,怎么了|
|B | A | 1 | 101 | | 102 |嘿,A,这里是stackoverflow|
|B | A | 0 | 102 | | 103 |这是很好的B,还有什么新鲜事|
|A | B | 1 | 102 |+----------------------------------------+
|A | B | 0 | 103|
|B | A | 1 | 103|
+--------------------------------------------+
聊天窗口
+-----------------------------------------+
|用户A|
+-----------------------------------------+
|你好,B,怎么了|
|收到:嘿,A,这里是stackoverflow|
|森特:很好,B,有什么新鲜事吗|
+-----------------------------------------+
+-----------------------------------------+
|用户B|
+-----------------------------------------+
|你好,B,怎么了|
|Sent:嘿,A,这里是stackoverflow|
|收到:很好,B,有什么新鲜事吗|
+-----------------------------------------+

*/
我认为在关系数据库中很好。大多数人都遵循类似的体系结构

我不建议使用
UUID
NEWID()
(在
SQL Server
中使用)来存储每个消息,正如您先前建议的那样,每个消息将生成一个32字符的id。例如,如果您有1000个用户,每个用户每天大约发送10条消息,那么生成的UID总数将为10000条,现在您可以计算每周、每月和每年的数据。实际上会有更多的数据,所以我建议您使用两个值的组合作为唯一标识符。
UserID
MessageID
。 将它们都标记为15位数字值或任何您认为正确的值,并将它们组合起来以识别每个用户的消息

示例案例:

UserID: 1000001
MessageId: 1000001
Message: 'Hello'

UserID: 1000002
MessageId: 1000001
Message: 'Hi'

让我知道你的想法

有点晚了:D但是,如何为mongodb数据库创建这个呢?我发现很难删除一个用户的对话:)这应该是一个评论而不是答案