我正在编写一个聊天机器人,它使用过去的对话来生成它的响应。目前我使用文本文件来存储所有数据,但我想使用数据库,以便机器人的多个实例可以同时使用它。
我应该如何构建这个数据库?
我的第一个想法是保留一个主表,例如create table Sessions (startTime INT,ip INT, botVersion REAL, length INT, tableName TEXT)
. 然后对于每个对话,我create table <generated name>(timestamp INT, message TEXT)
都会使用该对话期间发送或接收的所有消息。对话结束后,我将新表的名称插入到Sessions(tableName)
. 以这种方式以编程方式创建表可以吗?我之所以问,是因为大多数 SQL 教程似乎都建议在程序初始化时创建表。
另一种方法是使用一个巨大的create table Messages(id INT, message TEXT)
表来存储发送或接收的每条消息。当对话结束时,我可以添加一个新条目,Sessions
其中包括id
在该对话期间使用的条目,以便我可以查找在某个对话期间发送的所有消息。我想这样做的一个好处是我不需要数百或数千张桌子。
我计划使用 SQLite,尽管它的并发性很低,因为机器人的每个实例在生成响应之前可能会进行数千次读取(这将导致一次写入)。不过,如果另一个关系数据库更适合此任务,请发表评论。
注意:关于在数据库中存储聊天日志还有其他关于 SO 的问题,但我特别在寻找它应该如何构建以及对上述想法的反馈。