用户组:
用户1创建用户2,3,4。
用户2创建用户5,6,7。
用户6创建用户8,9,10等...
最后,用户1可以管理所有用户。和6可以管理8,9,10。
我打算这样存储,
user - created_by
2 - 1
3 - 1
4 - 1
5 - 2
这是在MySQL数据库中存储数据的正确方法吗? 任何人都可以帮助我改善这种数据库结构。谢谢。
答案 0 :(得分:1)
这可能不是最佳解决方案,但是您可以创建一个表示父树的属性hierarchy
。
例如,用户1创建用户2,用户2创建用户3,该用户3的属性值将为:“ 1,2”
因此表将如下所示:
| id | hierarchy |
|----|-----------|
| 1 | NULL |
| 2 | "1" |
| 3 | "1,2" |
| 4 | "1,2" |
如果我们要检索由user1管理的所有用户:
SELECT * FROM users WHERE FIND_IN_SET("1",hierarchy) > 0
如果我们想检索管理user3的所有用户:
SELECT * FROM users WHERE FIND_IN_SET (id, SELECT hierarchy FROM users WHERE id = 3) > 0
当然,解决方案是有限的,特别是如果您想进行复杂的查询,我建议您选择一种XML方法。最好让您的数据看起来像一棵树