作者tas72732002 (蔥頭)
看板Programming
標題[問題] 關於聊天室schema設計
時間Sat Jan 21 21:54:26 2017
請問一下各位大大, 假設我要做一個聊天室, 包含團隊頻道和個人頻道
db schema 大致為
好友table
uid
fid
time
使用者table
userid
time
聊天table
sid
type(1:團隊 2:個人(私聊))
rid(房間id)
msg(裡面會包含訊息與發送者資訊)
time
如果是團隊部分rid, 就是user所加入的團隊id, 比較單純
但如果個人部分的rid
我的想法是A_B的userid做為rid
例如玩家A userid : 100001, 玩家B userid : 100002
rid = 100001_100002(小的編號放置在前面)
但這樣查詢有點麻煩, 如果我要查詢目前我的私聊有哪些新訊息
我必須
1. 拉出我的好友名單
2. 將我的userid與好友userid組成rid, 還需判斷小的編號要放前面
3. 將組好的rid, 丟到聊天table查詢
感覺有點複雜, 不知道大家有沒有比較好的設計?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.34.181.227
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Programming/M.1485006869.A.389.html
1F:→ MOONRAKER: 把他用function或method包裝好就好了 218.161.46.90 01/22 11:08
2F:→ MOONRAKER: 複雜也就一次 以後呼叫就好 218.161.46.90 01/22 11:08
3F:→ MOONRAKER: rid何不直接改成sender receiver兩個 218.161.46.90 01/22 11:10
4F:→ MOONRAKER: 欄位就好 218.161.46.90 01/22 11:11
5F:→ MOONRAKER: 使用者1發給3: sender=1 receiver=3 218.161.46.90 01/22 11:11
6F:→ MOONRAKER: type=2 218.161.46.90 01/22 11:12
7F:→ MOONRAKER: user 1發給room 3:sender=1 receiver=3 218.161.46.90 01/22 11:12
8F:→ MOONRAKER: type=1 218.161.46.90 01/22 11:12
9F:→ tas72732002: 這樣我要查詢1與3的聊天紀錄 114.34.181.227 01/22 11:18
10F:→ tas72732002: 不就要sender=1 and receiver=3 OR 114.34.181.227 01/22 11:19
11F:→ tas72732002: sender=3 AND receiver= 1 114.34.181.227 01/22 11:19
12F:→ MOONRAKER: 還要type=2咧 有什麼困難嗎 218.161.46.90 01/22 11:23
13F:→ MOONRAKER: 就多一節clause而已 你想的那個精美的 218.161.46.90 01/22 11:23
14F:→ MOONRAKER: <send>_<recv>還要拆字串 218.161.46.90 01/22 11:24
15F:→ MOONRAKER: sql的index統統用不上 那何必用sql 218.161.46.90 01/22 11:24
16F:→ MOONRAKER: 一直附加到檔案就好了 218.161.46.90 01/22 11:25
17F:→ MOONRAKER: 反正硬碟很快 還不用sqld佔記憶體咧 218.161.46.90 01/22 11:26