嗨,我试图在数据库(SQLite)中存储组、子组和用户信息。一个组可以有多个子组,用户可以属于多个组/子组,如下所示。
它应该能够按组、子组或用户搜索。
发布于 2011-09-10 17:02:37
下表结构提出了以下假设:
subgroups).
GroupTable GroupID (PK) GroupName
SubGroupTable SubGroupID (PK) GroupID (FK on GroupTable.GroupID) SubGroupName
UserTable UserID (PK) UserName
现在,创建一个多到多的关系表,在一个或多个子组中建立用户参与:
User_Sub_Groups
UserID (FK on UserTable.UserID)
SubGroupID (FK on SubGroupTable.SubGroupID)如果组也可以是子组,那么able提供的示例是一种选择,尽管我的做法略有不同:
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)从这里开始,您只需使用各个表之间的联接来执行搜索。例如,要返回属于某个组的所有用户:
SELECT
tblUser_Group.GroupID, tblUser.*
FROM
tblUser_Group
INNER JOIN
tblUser ON tblUser_Group.UserID = tblUser.UserID
WHERE
tblUserGroup.GroupID = @GroupID若要返回特定用户是其成员的所有SubGroups:
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诸若此类。一开始想一想各种连接排列是很有挑战性的,但这是一种非常灵活和可扩展的安排。
希望这能帮上忙!
发布于 2011-09-10 12:46:10
我就是这样做的:
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)https://stackoverflow.com/questions/7371657
复制相似问题