我正在创建一个拥有自己“内存”的聊天机器人。它将用户的输入保存在键值对中,然后访问该内存以查看如何构建响应。数据库将基本上充当字典,随着机器人接收输入而增长。
第一种方法是简单地创建两列并将多个值添加到“值”列。值列存储多个字符串。 (我不确定我怎么会这样做......)像这样:
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是否支持列表。
答案 0 :(得分:3)
我认为这两种方法都不是一种好方法。怎么样?
key value
"i play" "games"
"i play" "with"
"i play" "music"
"and i" "run"
"and i" "sleep"
"and i" "like"
也就是说,键/值对应该是每个键/值对一行。当然,您可能需要其他列来指定其他信息 - 例如实体ID或多个值的排序。