我正在开发一个社交网站,并且需要用户能够互相交流和/或互相阻止。我看到它的方式,2用户可以是朋友,待定,块或NULL。我希望有一个视图为每个确认的关系显示一行。我的观点正确地显示了这种关系,但我必须做一个解决方法,只显示1行/关系而不将表与自己联合起来,并交换订单或请求者和请求者。社交网络数据库设计 - 朋友/座位关系
任何人有关于如何清理这个了吗?
感谢, - 格雷格
关系表:
请求者(INT)|请求者(int)| ApprovedTimestamp(smalldatetime)| IsBlock(位)
vwRelationship检视:
SELECT DISTINCT
CASE WHEN f.Requestor < f.Requestee THEN f.Requestor ELSE f.Requestee END AS UserA,
CASE WHEN f.Requestor < f.Requestee THEN f.Requestee ELSE f.Requestor END AS UserB, CASE WHEN b.Requestor IS NULL AND b.Requestee IS NULL
THEN CASE WHEN f.AcceptedTimestamp IS NULL THEN 'Pending' ELSE 'Friend' END ELSE 'Block' END AS Type
FROM dbo.Relationship AS f LEFT OUTER JOIN
(SELECT Requestor, Requestee
FROM dbo.Relationship
WHERE (IsBlock = 1)) AS b ON f.Requestor = b.Requestor AND f.Requestee = b.Requestee OR f.Requestor = b.Requestee AND f.Requestee = b.Requestor
实例查询:
选择类型从vwRelationship凡(用户a = 1并且用户B = 2)或(用户a = 2,用户B = 1)
场景:
- 用户1和用户2不知道对方|关系类型= NULL
- 用户1位朋友用户2 |关系类型= 待定
- 用户2接受|关系类型= 朋友
- 一个月之后用户2块用户1 |关系类型= 座
我看到三个问题。首先,表格似乎是关于友谊的地位,如果是这样的话,为友谊的开始存储时间戳似乎错位了。其次,你不记录谁设置了一个块,所以你不能告诉谁应该被允许删除它。第三,“封锁”似乎是一种与“朋友”和“待定”完全不同的信息。 –
“受阻”与“不友好”意味着什么? –
@Catcall认为我应该把它分成3个表格? (friend,pending,block)我可以确定谁在请求者字段设置了块,但是整个事情看起来太乱了 – Greg