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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM