数据库小白请教个数据库设计小问题
我刚开始自学数据库,想请教一下下面这种情况该怎么设计,非常感谢!!
假设有一个应用,有这样一个case:这个应用里有“用户”和“组”,两个概念,其中“组”就是三五成群的用户,有好比兴趣小组那样子。要求能够:
1,给出用户名,查询他属于哪些个组;
2,给出组名,查询该组有哪些用户。
我目前是这样想:
1,肯定要有个“用户”表,但要不要给“用户”表添加一个属性,记录每一个人都参加了哪些组?
2,好像也得有一个“组”表,除了组名称和其他属性外,肯定要记录每个“组”包含了哪些用户。
然后我就产生了一些疑惑:
1,如果“用户”表中,每个用户有一个组列表;而“组”表中,每一个组也有一个用户列表;那么我感觉有些冗余,而且将来必定要维护一致性问题。比如,向一个组里添加了一个用户,就必须保证也向该用户添加一个组。万一这中间有什么错误,或者将来软件变大了,维护之中产生什么纰漏呢?
2,单看“组”表:假如我只创建一个表记录所有“组”,那么每一个“组”是不是应该仅用一个属性(一个字段)来记录它包含哪些“用户”??如果是这样,那我就还得给这个字段定义一个格式,比如“user1;user2;user3;...”,这相当于我自己承担了一部分数据管理的工作,感觉不太对头啊?
3,假设“用户”表不包含用户的“组”信息,以便消除一致性困扰,那么当要以用户名查询他所属的组时,岂不是得遍历整个“组”表?当数据量大了感觉挺慢的。
4,与“3”类似,假如“组”表不记录用户信息,那么当要查询一个组包含哪些用户时,也是有同样的困扰。
请问这种情况该怎么设计?但愿我表述清楚了我的问题。谢谢。