在关系数据库中存储聊天记录
我正在写一个聊天机器人,它会根据过去的对话来生成回复。目前我使用文本文件来存储所有数据,但我想换成数据库,这样多个机器人实例就可以同时使用。
我该如何设计这个数据库呢?
我最初的想法是建立一个主表,比如 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
不要为每个对话都创建一个不同的表格。相反,应该在你现有的表格中添加一个“对话”这一列。