数据库设计困境

时间:2013-09-29 05:48:44

标签: php mysql sql database database-design

我对我当前的项目有疑问。它是某个组织的在线注册系统。

我对如何确定某个“会议”中成员的出席率存在这个问题。

我的数据库中有一个名为“members”的表,其中包含有关其注册的所有信息以及“会议”表。每年都有会议,会员注册成为该会议的参与者。我需要为“管理员”设置一个查看功能,以查看谁参加了上一次会议。

我已经想到的是,我将在'members'表中添加'first_conference'列并设置一个类似'1'的值,如果该成员注册或参加了'first_conference',那么如果管理员选择查看出勤率在第一次会议中,“first_conference”列的值为“1”的成员将显示在页面中。

事情是它是一年一度的,我找到了类似更好的算法。因为如果我按照自己的想法行事,我会像每年在表格'成员'中添加新专栏一样,例如('second_conference','third_conference',...,'nth_conference')

1 个答案:

答案 0 :(得分:2)

这种关系称为many-to-many,这意味着每个成员将有多个会议,每个会议将有多个成员。

你应该通过使用第三个表来打破这种关系,我们可以将其称为conf_members,其列类似于id, member_id, conference_id, attended,然后每当你召开会议时,你都会在conference中创建一个新行表格,例如新会议ID为10,然后您向会员发送邀请,并为每个新邀请添加新行,例如:

id, member_id, conference_id, attended
1 , 2        , 10           , 0
1 , 5        , 10           , 0
1 , 4        , 10           , 0
1 , 3        , 10           , 0

会员出席后,您将参加人数从0更改为1 如果您正在邀请尚未成为会员的人,则应在members表中添加该记录,然后将该成员的引用添加到此表中。

所以现在您不再需要触摸数据库,并且可以在joinmembersconferences表之间使用conf_member轻松生成视图。