坚持复杂的数据库设计

时间:2011-10-11 03:30:06

标签: database-design

我正在开始一个新项目。这个项目目前处于规划和设计阶段,但是我可以想到一个解决方案的障碍,但它似乎并不是最优化或有组织的。任何帮助表示赞赏。

我有以下用例:

  1. 用户可以创建活动(如在比赛或节日等物理活动中),这是“协调员”。
  2. 可以为此新事件分配零个或多个工作人员来处理事件。他们可以访问有关该活动的其他工具/数据。
  3. 此活动可能有零个或多个参与者将通过此服务注册。
  4. 任何未注册的用户都可能找到包含该活动详情的页面
  5. 我试图围绕如何创建有效存储此信息的数据库。特别是如果我们计划扩展到谁知道有多少事件。现在,我有以下几点。在数据库设计中还有更多,但它主要是用于身份验证和用户数据的数据,所以我不包括它 - 让我知道如果看到完整的设计是否有帮助。

    USER
    -----------
    id (pk)
    
    EVENT
    -----------
    id (pk)
    coordinator (fk, references USER.id)
    page
    workers
    participants 
    
    //workers and participants are lists of USER.ids
    

    这很简单,但我只能看到它在一个方向上有效,而不是两者都有效。查询任何给定事件的工作者和参与者将非常简单,但找到任何给定用户的事件将非常麻烦。

    任何想法/批评都会非常有帮助。谢谢。

3 个答案:

答案 0 :(得分:2)

这实际上很容易放入RDMS。您只需要为工人和参与者建立一系列多对多关系。您还可以在此表中存储特定于该事件的参与者/工作人员所需的任何其他内容。

User
----
ID

Events
------
ID

Participants
-----------
User ID
Event ID

Workers
-------
User ID
Event ID

如果参与者和工人没有其他数据存储,您可以使用单个表并表示其状态

SignUps
-------
EventID
UserID
Type ( W | P )

你甚至可以通过这种方式做协调员,以防万一有机会让一个活动有协调员

答案 1 :(得分:2)

enter image description here

答案 2 :(得分:0)

您可以在MongoDB中使用ID数组,但不能(有效地)在基于SQL的数据库中使用,例如SQL Server或MySQL AFAIK。

相反,如果您不使用基于No-SQL的数据库,请使用映射表存储事件和工作人员以及事件和参与者之间的关系。