我的人和一个人可以多接触其他人,所以基本上“默认”表将是:自我M:N关系
persons (id)
contacts (person1_id, person2_id)
有了这个模式,我不得不发出像
查询SELECT *
FROM contacts c
WHERE (person1_id = *id of person1* AND person2_id = *id of person2*)
OR
(person1_id = *id of person2* AND person2_id = *id of person1*)
当我只插入一次这样的关系时,得到两个人之间的关系。
处理这种情况的常见做法是什么?
- 插入一次数据,做这样的OR查询
- 插入的关系的两倍,这样person1_id = ID的PERSON1和person2_id = ID的PERSON2足够
- 完全不同的方法?
假设:
- 的M:N表实际上包含额外的数据,所以如果我创建两种方式的关系,我不得不重复数据
- 这是一个核心组成部分应用和最不平凡的查询涉及至少一个子查询,确定这种关系是否存在
在SQL中对无向图进行一些阅读,这就是'contacts'表代表的内容。 – 2011-05-12 23:27:44
感谢您的期限:) – Maxem 2011-05-12 23:29:07
确保这符合您的要求,这意味着当person1联系person2时,这与person2联系person1的意思相同。这可能不是你真正想要的;我有时会将这种差异描述为Twitter的“追随”模式与Facebook的“朋友”模式。 – xzilla 2011-05-13 03:41:01