数据
假设我有一个网格,代表房间里的所有人以及他们彼此交谈时的对话。
约翰 | 苏珊 | 布莱恩 | 雷切尔 | |
---|---|---|---|---|
约翰 | 放心 | 工作 | 运动的 | 电影 |
苏珊 | 工作 | 咕哝着 | 旅行 | 音乐 |
布莱恩 | 运动的 | 旅行 | 没有什么 | 食物 |
雷切尔 | 电影 | 音乐 | 食物 | 自嘲 |
数据库
最初我考虑只制作一个常规表格People
和Conversations
桌子Conversations
是一把钥匙,topic
participant1
participant2
困境
参与者的顺序完全无关。一个简单的问题“Rachel 和 Brian 谈论什么”变成了一个需要运行的复杂查询。
因此必须做以下两件事之一:
- 冗余数据添加到数据库中:(Rachel 和 Brian)或(Brian 和 Rachel)
- 查询非冗余数据需要一个极其复杂的查询,因为您不知道 Rachel 是参与者1还是参与者2。
采用上面的 1 会创建一个不可持续的 O(n^2) 数据库模型,而 2 似乎是 DBA 试图查询有意义的数据的噩梦。
问题
如何对这样的数据结构进行建模?SQL 是否是适合这项工作的工具,还是我应该完全研究其他东西?