【问题标题】:Database-design dilemma数据库设计困境
【发布时间】:2013-09-29 05:48:43
【问题描述】:

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

关于如何确定某个“会议”中成员的出席情况,我有这个问题。

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

我的想法是,如果该成员注册或参加了“first_conference”,我将在“members”表中添加“first_conference”列并设置一个类似“1”的值,以便管理员选择查看出席情况在第一次会议中,“first_conference”列的值为“1”的成员将显示在页面中。

问题是它是每年一次,我正在为此寻找更好的算法。因为如果我按照自己的想法去做,我就像每年都会在“成员”表中添加新列,例如('second_conference', 'third_conference', ... , 'nth_conference')

【问题讨论】:

    标签: php mysql sql database database-design


    【解决方案1】:

    这种关系称为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 表中为该人添加一条记录,然后在此表中添加对该成员的引用。

    所以现在您不再需要接触数据库了,您可以通过在 membersconferencesconf_member 表之间使用 join 轻松生成视图。

    【讨论】:

    • 哦,我没有考虑过。好吧,我了解您的解决方案,我认为您是在建议我使用“外键”对吗?就像在您建议的新表中一样,“conf_members”具有从“members”表引用的“member_id”列和从“conferences”表引用的“conference_id”列。这就是你建议我这样做的方式吗?谢谢。 :)
    • 你忘了说member_id, conference_id 应该是外键
    猜你喜欢
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    相关资源
    最近更新 更多