IM实现联系人及联系人分组的数据库设计
2012-03-06 17:20
204 查看
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。
两张表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。
相关文章推荐
- 调用Android(Froyo)中Contacts的数据库,实现联系人与分组的增删改查--附效果图及源码
- Android 系统联系人全特效实现(上),分组导航和挤压动画
- Spring技术内幕之数据库操作组件的实现(01)-JDBC的设计与实现
- 数据库设计实现严格的一对一关系 (重新学习)
- 密保问题数据库设计思路和代码实现
- 联系人数据库设计之PhotoPriorityResolver
- 数据库字段设计实现无限级分类
- 实现基于组织机构的数据集权限系统的设计思路讲解【提供完整数据库设计下载】
- SQL Server 数据库设计和实现(二)
- 想做的都做好了休笔半个月,自动行政审批流程组件的审批流程流转实现【附数据库设计下载】
- 自己动手实现权限控制(数据库表的设计)
- 晒晒我的无限级分类设计--纯数据库实现
- 对象的继承关系在数据库中的实现方式和PowerDesigner设计
- 实现简单通讯录操作。 1、定义联系人类AddressPerson。实例变量:姓名、性别、电话号码、住址、分组名称。方法:自定义初始化方法(姓名、电话号码)、显示联系人信息 2、在main.m中定义可变
- 数据库设计与实现(1)
- IM系统中聊天记录模块的设计与实现
- 一个简单的实现不同权限的用户登录后看到不同的菜单设计的数据库表清单
- 无限级分类设计--纯数据库实现
- 数据库访问层设计与实现(2)
- Android系统联系人全特效实现(上),分组导航和挤压动画