您好我正在尝试将数据库,子组和用户信息存储在数据库中(SQLite)。一个组可以有多个子组,用户可以属于多个组/子组,如下所示。
它应该能够按组,子组或用户进行搜索。
答案 0 :(得分: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)
答案 1 :(得分:0)
下表结构做出以下假设:
用户必须是至少一个子组的成员才能加入群组
grouptable将 GroupID(PK) 组名
SubGroupTable SubGroupID(PK) GroupID(GroupTable.GroupID上的FK) 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排列可能很有挑战性,但这是一种非常灵活和可扩展的安排。
希望有所帮助!