在关系数据库中存储聊天记录

1 投票
1 回答
1397 浏览
提问于 2025-04-17 13:17

我正在写一个聊天机器人,它会根据过去的对话来生成回复。目前我使用文本文件来存储所有数据,但我想换成数据库,这样多个机器人实例就可以同时使用。

我该如何设计这个数据库呢?

我最初的想法是建立一个主表,比如 create table Sessions (startTime INT, ip INT, botVersion REAL, length INT, tableName TEXT)。然后对于每一次对话,我会 create table <生成的名字>(timestamp INT, message TEXT),里面存放在这次对话中发送或接收到的所有消息。当对话结束时,我会把新表的名字插入到 Sessions(tableName) 中。这样以编程的方式创建表可以吗?我问这个是因为大多数SQL教程似乎都建议在程序初始化时创建表。

另一种方法是创建一个超级大的 create table Messages(id INT, message TEXT) 表,存储所有发送或接收的消息。当对话结束时,我可以在 Sessions 中添加一个新条目,包含在这次对话中使用的 id,这样我就可以查找某次对话中发送的所有消息。我想这样做的一个好处是,我不需要有成百上千的表。

我打算使用SQLite,尽管它的并发性较低,因为每个机器人实例在生成回复之前可能会进行成千上万次读取(这会导致一次写入)。不过,如果有其他关系型数据库更适合这个任务,请留言告诉我。

注意:关于如何在数据库中存储聊天记录,SO上有其他问题,但我特别想知道应该如何结构化以及对上述想法的反馈。

1 个回答

0

不要为每个对话都创建一个不同的表格。相反,应该在你现有的表格中添加一个“对话”这一列。

撰写回答