即时通讯数据库好友关系(一对多)应该怎样设计?
问1:
比如一个帐户的号码,年龄,性别,说明等用一张表完全可以容纳下了,但每个帐户有很多的好友,好友放这张表里不太好办吧?
是不是要为每一个帐户新建一张表来存储好友?
问2:如果是这个不是好友而是礼物数呢?意思就是我是楼主,楼主的好友,我要送礼物给楼主的好友?(待解)
问1解决:
要建立好友关系表。
说明谁是谁的好友,反过来不成立的。
按照QQ的行为,假设我是LZ(楼主)的好友,那么就有关系:我->LZ(楼主)
LZ是我的好友,就有:LZ->我
假设我们互为好友,就有:LZ->我和我->LZ
如果大了,好友关系表要分表。例如:1-1000的好友关系存放在A表,1001-2000的好友关系存放在B表。
至于要不要分表,看你的IM的系统容量和你用的数据库的性能。
每个帐户都得有一个系统内部识别的ID(一般用整形(2、4、8字节))
好友关系表就是这些ID的一种组合,通常2-3个整形字段就可以了,按发起ID做一个簇索引
这样的表,记录虽然很多,绝对容量并不大
1(用户基本信息表,内含ID)对多(好友关系表,ID&ID...)
待解。