哪种方法更适合在sqlite数据库中存储键值对?

时间:2016-03-10 00:47:20

标签: java sql sqlite chatbot

我正在创建一个拥有自己“内存”的聊天机器人。它将用户的输入保存在键值对中,然后访问该内存以查看如何构建响应。数据库将基本上充当字典,随着机器人接收输入而增长。

第一种方法是简单地创建两列并将多个值添加到“值”列。值列存储多个字符串。 (我不确定我怎么会这样做......)像这样:

 Key     | Values                 |
"i play" | "games","with","music" |
"and i"  | "run", "sleep", "like" |

另一种方法是使一个“Key”列对应多个值。每个值列存储一个字符串。像这样:

  Key    | Value 1 | Value 2 | Value 3 |
"i play" | "games" | "with"  |"music"  |
"and i"  | "run"   | "sleep" | "like"  |

我知道在关系数据库中存储多个值到一个键是一个很大的“禁忌”,所以如果有更好的方法让我知道?

编辑:关于机器人如何创建响应的一点点,它将需要一个键并从多个值中随机选择一个值。例如,如果“我玩”是所选择的键,它将随机选择诸如“音乐”之类的值。从那里,它将找到称为“播放音乐”的新密钥(如果密钥不存在,它将构造一个)并从多个值中随机选择一个值。

我想过可能在值列中使用了一个arraylist,因此它是一个真正的“一键,一个值”键值对,但我不确定SQLite是否支持列表。

1 个答案:

答案 0 :(得分:3)

我认为这两种方法都不是一种好方法。怎么样?

key         value
"i play"    "games"
"i play"    "with"
"i play"    "music"
"and i"     "run"
"and i"     "sleep"
"and i"     "like"

也就是说,键/值对应该是每个键/值对一行。当然,您可能需要其他列来指定其他信息 - 例如实体ID或多个值的排序。