IM實現聯絡人及聯絡人分組的資料庫設計

2022-01-31 22:42:47 字數 1103 閱讀 2315

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。

關於聯絡人分組

聯絡人所有組資訊 groups.content uri 聯絡人組具體資訊 contactscontract.data.content uri cursor cursor getcontentresolver query groups.content uri,null,null,null,null f...

關於聯絡人分組

聯絡人所有組資訊 groups.content uri 聯絡人組具體資訊 contactscontract.data.content uri cursor cursor getcontentresolver query groups.content uri,null,null,null,null f...

獲得聯絡人

注意在 後要加上 貌似從android2.0開始,聯絡人的api做了很大的調整。people介面由contactscontract.contacts代替。在聯絡人的 號碼中有很多種,如果只想獲得手機號碼。如下 cursor phones mcontext.getcontentresolver que...