我正在開發一個社交網站,並且需要用戶能夠互相交流和/或互相阻止。我看到它的方式,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