zoukankan      html  css  js  c++  java
  • IM实现联系人及联系人分组的数据库设计

          openfire中通过ofgroup/ofgroupprop/ofgroupuser实现组织结构中的分组,通过ofroster/ofrostergroups实现好友关系中的分组。但是呢,我们做二次开发的时候,希望能够有自己的个人联系人及分组,它没有确认过程,也就是说,只要我愿意,我可以将任何组织结构中的用户添加到自己的任何联系人分组中。那么我们设计如下:

    两张表ofprivateuser/ofprivategroup,前者记录联系人信息,后者记录分组信息。

    ofprivateuser:userid(primary key)(用户id), groupid(primary key)(组id), permission(组拥有者对用户的权限)

    ofprivategroup:groupid(primary key)(组id), name(组显示名称), owner(组拥有者)

    备注:userid一般为username,可索引到ofuser表中的用户记录。owner表示,分组是属于哪一个用户的。

    对于如此设计,大家可能会有如下疑问:

    1.一个联系人可以属于多个分组吗?

    答:可以。比如ofprivateuser: (userid,groupid,permission)为(zhangsan,group001,1)以及(zhangsan,group002,1)。则表示,zhangsan既属于group001又属于group002。

    2.一个用户如何查询自己的全部分组及分组下的联系人?

    答:通过owner字段在ofprivategroup中找到他名下的所有分组,再通过groupid字段在ofprivateuser中找到每个分组下的所有用户。

    3.ofprivateuser表中,groupid是不是外键?

    答:算是的,外键的作用是让两张表形成关联且外键只能引用外表中指定列的值。但是,我们也可以不将其设为外键,groupid是不是外键对我们编程没有影响。外键是数据库一级的完整性约束,就是书中说“参照完整性”的数据库实现方式。外键属性去掉后,DBMS不会对录入的数据进行“参照完整性”检查,仅此一点影响。

    4.修改组名方便吗?移动联系人的分组方便吗?

    答:方便,均只需要改动数据表中的一条记录。修改组名,直接操作ofprivategroup中groupid对应的name;移动联系人分组,直接操作ofprivateuser中userid对应的groupid。

  • 相关阅读:
    linux上搭建tingproxy服务
    windows上搭建linux系统
    PHP将图片流存为图片文件
    openLayer矩形框选要素,展示要素属性
    点击选中的要素,更换标注图片,并添加文本标注
    openLayer点击要素获取对应的属性信息
    openLayer实现放大缩小
    openLayer的切换中心点、定位功能
    使用openLayer加载arcgis中的地图
    openLayer实现两个地图联动
  • 原文地址:https://www.cnblogs.com/ErinCodeMM/p/2382312.html
Copyright © 2011-2022 走看看