2011-09-10 73 views
1

嗨我試圖在數據庫(SQLite)中存儲組,子組和用戶信息。一個組可以有多個子組,用戶可以屬於多個組/子組,如下所示。如何將數字列表存儲到數據庫中

  • 組1具有子組a,b,c和用戶A,B。
  • 組2具有子組d,e和用戶B,C,D。
  • 子組d具有用戶B,D並且屬於組2.
  • 用戶B屬於組1,2和子組a,c,d。

它應該能夠按組,小組或用戶搜索。

回答

0

下表結構作以下假設:

  1. 羣皆獨特而鮮明的每一個組,與實際羣組不同(一對多關係,羣組不可用作子羣)。
  2. 用戶必須至少一個子組的成員,以便參與組中

    grouptable將 的GroupID(PK) 組名

    SubGroupTable SubGroupID(PK) 的GroupID(FK上GroupTable.GroupID ) SubGroupName

    用戶表 用戶ID(PK) 用戶名

現在,創建一個許多一對多關係表的一個或多個亞組內建立用戶參與:

User_Sub_Groups 
    UserID (FK on UserTable.UserID) 
    SubGroupID (FK on SubGroupTable.SubGroupID) 

如果網上也能爲分組,然後由nulvinge提供的例子是一個選項,雖然我會做稍微不同的:

GroupTable 
    GroupID (PK) 
    GroupName 

UserTable 
    UserID (PK) 
    UserName 

SubGroupTable 
    ParentGroupID (Composite Key on GroupsTable.GroupID) 
    SubGroupID (Composite Key on GroupsTable.GroupID) 

UserGroupsTable 
    UserID (Composite Key on UserTable.UserID) 
    GroupID (Composite Key on GroupsTable.GroupID) 

從這裏,你只需使用各表之間的JOIN來執行搜索。例如,屬於誰所有用戶返回到一定的組:

SELECT  
    tblUser_Group.GroupID, tblUser.* 
FROM   
    tblUser_Group 
INNER JOIN 
    tblUser ON tblUser_Group.UserID = tblUser.UserID 
WHERE 
    tblUserGroup.GroupID = @GroupID 

要返回所有組,利用它的特定用戶是一個成員:

SELECT  
    tblGroup.GroupName AS SubGroupName 
FROM   
    tblUser_Group AS UG 
INNER JOIN 
    tblUser ON UG.UserID = tblUser.UserID INNER JOIN 
    tblGroup_SubGroup AS GSG ON UG.GroupID = GSG.SubGroupID INNER JOIN 
    tblGroup ON GSG.SubGroupID = tblGroup.GroupID 
WHERE  
    tblUser.UserID = 1 

等。首先想想你通過各種JOIN排列可能是一種挑戰,但這是一個非常靈活和可擴展的安排。

希望有幫助!

0

這是我會怎麼做:

Group: 
    id 
    NULL overgroup_id 

Membership: 
    user_id 
    group_id  

User: 
    id 

已經overgroup_id = NULL組是一組,否則這是一個羣。

要找到一組與ID GID所有users_ids,與亞組:

select user_id 
from Membership 
where group_id=gid 
or group_id in 
    (select group.id from Group where overgoup_id=gid) 
相關問題