逻辑上有点混乱,希望达人指点(主要是数据库的设计上,由一个用户一组变为一用户多组时有点乱了...)

ximomomoxinei14 2012-01-05 08:26:38
首先,感谢您能看这个帖子,这个帖子有点长,但我已经尽量在简化了,但依然很长.希望您能看完,然后给点建议,多谢了!!!

为了方便表述和理解起来容易一些,我以程序中的三个功能界面作为描述点吧

【创建用户界面】:功能是管理员可以创建一些用户信息
-创建用户-表结构如下->
id userid groupid
1 张三 10001
2 李四 10001
3 王五 10003
4 马六 10004

【创建组界面】该界面的功能就创建一些组。上个界面(创建用户界面)创建用户时会为用户指定属于哪个组,而那些组的来源就是在这个界面中添加的。
举个例子,当管理员创建用户的时候,界面上有个dropdownlist控件用来选择不同的组(而dropdownlist中的内容,就是该界面添加进去的一些组名)
-创建组-的表结构如下->

id gourpid groupName
1 1 1组
2 2 2组
3 3 3组
4 4 4组

【用户录入信息界面】
管理员创建一些用户以后,这些用户就可以登录系统(张三、李四等人登录该系统),他们可以录入一些信息,同时也能看到【同组】的人录入的信息(比如张三和李四都能看到彼此的录入记录,因为他们同在10001组)。

-录入信息-表结构如下
id information userid groupid
1 客户1的名字 1 10001
2 客户2的名字 1 10001
3 客户3的名字 2 10001
4 客户4的名字 4 40001

好了 基本的描述已经说完了 下面是提出的一些问题
—————————————————————————————————————————————————————————————————
如果单纯是一个用户只属于一个组,那上面这些逻辑方面已经很清楚了。

【但是现在需求变了,一个用户一个组要变为一个用户多个组】,比如 马六同时在1~4组中,那么马六就可以同时看到张三 李四 王五的信息(因为他们三个人所在的组马六是都有的)

这个需求的变化,从界面上很容易设计,既在创建用户的时候,可以用checklistbox来为用户选择多个组。
【但是数据库中的表应该怎么设计呢?】难道要设计成下面这样?(不同的组用逗号分开)

id userid groupid
1 张三 10001
2 李四 10001,10003
3 王五 10001,10003
4 马六 10001,10002,10003,10004

录入信息的表难道也要设计成如下这样?
id information userid groupid
1 客户1的名字 1 10001
2 客户2的名字 1 10001
3 客户3的名字 2 10001,10003
4 客户4的名字 4 10001,10002,10003,10004

这样做的话,用户的录入和读取方面就太麻烦了(方法是通过对groupid处理 以逗号split进行分割 然后用sql语句查询的时候用 where gourpid=10001 or gourpid=10002等等)

但是还存在一个问题,就是当管理员如果想【删除一些组】,那么 用户表 和 录入表中应该怎么办呢? 例如管理员删除掉了10002和10003组 ,然后用户表和录入表要都update一下groupid列的值,将groupid值中带有10002和10003都替换成空格????
我觉得这样做太麻烦了,希望大牛们帮忙解惑,应该是数据库设计方面出了问题,应该怎么做合理呢????????
...全文
84 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ximomomoxinei15 2012-01-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sandy945 的回复:]
一个解决的办法 就是你现在的做法,还一个就是关联表

各有利弊
[/Quote]
嗯 选择了关联表 至少逻辑上能通顺些 不会一帆风顺的 碰到问题再具体分析吧
感谢回答!
阿非 2012-01-05
  • 打赏
  • 举报
回复
一个解决的办法 就是你现在的做法,还一个就是关联表

各有利弊
ximomomoxinei14 2012-01-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 orain 的回复:]
再拆出一个表来,记录 userid 和 groupid 的对应关系
userid groupid
把录入信息的表的 groupid 删掉
[/Quote]
right thank you
over
orain 2012-01-05
  • 打赏
  • 举报
回复
再拆出一个表来,记录 userid 和 groupid 的对应关系
userid groupid
把录入信息的表的 groupid 删掉
ximomomoxinei17 2012-01-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dogstar901 的回复:]
可以插入多个数据
id information userid groupid
1 客户1的名字 1 10001
2 客户2的名字 1 10001
3 客户3的名字 2 10001
4 客户3的名字 2 10003
4 客户4的名字 4 10001
5 客户4的名字 4 10002
[/Quote]
这样做感觉不妥,在读取的时候可能会有些麻烦 多余数据过多
dogstar901 2012-01-05
  • 打赏
  • 举报
回复
可以插入多个数据
id information userid groupid
1 客户1的名字 1 10001
2 客户2的名字 1 10001
3 客户3的名字 2 10001
4 客户3的名字 2 10003
4 客户4的名字 4 10001
5 客户4的名字 4 10002

62,266

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧