这个表该如何设计,极常见而且极富有挑战性的问题……

noApple 2003-10-13 09:27:29
一个青年活动中心,有近1千名会员,每周该中心要举行举办两次活动,活动人数不定,取决于会员报名情况。

现在的情况是要设计活动表,记录每次报名有什么人参加
比如:

活动A,参加会员有:会员A 会员B 会员D
活动B,参加会员有: 会员A 会员K

现在有两种设计了方案:
一种是:

活动字段 参加会员字段

活动A 会员A
活动A 会员B
活动A 会员D
活动B 会员A
活动B 会员K

第二种
活动字段 参加会员字段

活动A 会员A,会员B,会员D
活动B 会员A,会员K

如果按第一种方案,对数据库做各种操作是很方便。但记录条数会很大
现在我要考虑的是,如果按第二种方案,在从一个活动中添加会员或删除会员比较麻烦,因为要处理字符串。如果要查询A会员是否参加了A活动的话就比较麻烦,如果采用第一种方案就比较方便:只要一条Select * from 活动表 where 活动字段=活动A and 参加会员字段=会员A

请诸位发表发表意见吧
另外,每次活动都有若干个赞助单位,每次活动都有若干个工作人员。为了简化问题,我没有提出来,如果采用第二种方案就太方便了每个活动只占用一条记录,如下
活动字段 参加会员字段

活动A 会员A,会员B,会员D

协助单位字段 主持人字段
单位A,单位B 主持人A,主持人D
...全文
34 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
CrazyFor 2003-10-13
  • 打赏
  • 举报
回复
大力已经给出了最佳的方案.
happy19781921 2003-10-13
  • 打赏
  • 举报
回复
肯定是第一种了,这才是标准的数据库设计思想。第二中根本就行不通。每个表的数据存储量都是很大的,所以不必考虑数据存不下的问题了。
txlicenhe 2003-10-13
  • 打赏
  • 举报
回复
第一种好。
yujohny 2003-10-13
  • 打赏
  • 举报
回复
肯定是第一种,
第二种是自己给自己找麻烦,写时候要处理,读时候要处理,统计时候也要处理
szc4315 2003-10-13
  • 打赏
  • 举报
回复
赞成第一种方案
xyjdn 2003-10-13
  • 打赏
  • 举报
回复
按第二种方案,在从一个活动中添加会员或删除会员比较麻烦,因为要处理字符串。如果要查询A会员是否参加了A活动的话就比较麻烦,

//

没参加就为零怎么样?不用删的呀

比如说,增一个字段,参加的为1、不参加的为0,检索时先检该字段为1的(参加的)即可。

--------//


noApple(没有苹果) ,先检索参加的(为1的),然后生成一个表,那就是全部参加的了,然后按你原来的做就行了。
DigJim 2003-10-13
  • 打赏
  • 举报
回复
第一种方案
bflovesnow 2003-10-13
  • 打赏
  • 举报
回复
第1种符合范式
但如果第2种能满足你的要求,也可以用
zjcxc 元老 2003-10-13
  • 打赏
  • 举报
回复
记录条数多不是问题,那个软件的数据库记录没有几万条?
创建索引后,数据的处理速度会很快.


第二种的弊端很多:
1.查询不方便
2.统计不方便
3.数据增加,删除,修改不方便.
4.效率极低,连索引都不能充分利用.


noApple 2003-10-13
  • 打赏
  • 举报
回复
xyjdn(项有建^_^) :

我不太懂老兄的意思呀,如果采用第二种方案,每个活动参见人数都不确定呀,肯定要搜索字符串的呀
zjcxc 元老 2003-10-13
  • 打赏
  • 举报
回复
推荐第一种,第二种的话,如果参加的人很多,就会保存不下,而且对于数据统计也不方便.
xyjdn 2003-10-13
  • 打赏
  • 举报
回复
按第二种方案,在从一个活动中添加会员或删除会员比较麻烦,因为要处理字符串。如果要查询A会员是否参加了A活动的话就比较麻烦,

//

没参加就为零怎么样?不用删的呀

比如说,增一个字段,参加的为1、不参加的为0,检索时先检该字段为1的(参加的)即可。

pengdali 2003-10-13
  • 打赏
  • 举报
回复
第一种方案

create table 活动表(活动id,活动名,协助单位,其他字段,)
create table 会员表(会员id,会员名,其他字段)
create table 活动参加表(活动id,会员id)
create table 活动协助单位表(单位id,单位名称)
create table 活动主持人(活动id,会员id)

或:


create table 活动表(活动id,活动名,协助单位,其他字段,)
create table 会员表(会员id,会员名,其他字段)
create table 活动参加表(活动id,会员id,是否是主持人)
create table 活动协助单位表(单位id,单位名称)

34,874

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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