Database 如何将数字列表存储到数据库
嗨,我正在尝试在数据库(SQLite)中存储组、子组和用户信息。一个组可以有多个子组,用户可以属于多个组/子组,如下所示Database 如何将数字列表存储到数据库,database,database-design,Database,Database Design,嗨,我正在尝试在数据库(SQLite)中存储组、子组和用户信息。一个组可以有多个子组,用户可以属于多个组/子组,如下所示 组1有子组a、b、c和用户a、b 第2组有子组d、e和用户B、C、d 子组d有用户B、d,属于组2 用户B属于组1、2和子组a、c、d 它应该能够按组、子组或用户进行搜索。我会这样做: Group: id NULL overgroup_id Membership: user_id group_id User: id overgroup_i
- 组1有子组a、b、c和用户a、b
- 第2组有子组d、e和用户B、C、d
- 子组d有用户B、d,属于组2
- 用户B属于组1、2和子组a、c、d
它应该能够按组、子组或用户进行搜索。我会这样做:
Group:
id
NULL overgroup_id
Membership:
user_id
group_id
User:
id
overgroup_id=NULL的组是一个组,否则它是一个子组
要查找id为gid的组中所有用户的id,请执行以下操作:
select user_id
from Membership
where group_id=gid
or group_id in
(select group.id from Group where overgoup_id=gid)
下表结构作出以下假设:
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)
从这里开始,您只需使用不同表之间的联接来执行搜索。例如,要返回属于某个组的所有用户:
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
等等。一开始考虑各种连接排列可能会很有挑战性,但这是一种非常灵活和可伸缩的安排
希望有帮助