作者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/cn.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