【问题标题】:Own table in database or leaving a field empty?在数据库中拥有自己的表或将字段留空?
【发布时间】:2017-08-01 01:09:13
【问题描述】:

在我的项目中,我有以下表格:

  • 事件(id、标题、日期、user_id)
  • 组(id、名称、creator_id)
  • 用户(ID、姓名、电子邮件...)
  • group_user (group_id, user_id)

在应用程序中,一个用户可以有一个个人事件,或者一个组可以有一个将被组中的所有用户共享的事件。

一个用户能够创建一个事件,那么事件 user_id 就是这个用户 ID。

现在我想在组内创建一个事件 - 所以我需要事件和组之间的关系。

如果事件只属于用户而不属于组,我应该在事件表中创建属性 group_id 并将其留空吗? 或者我应该考虑创建一个像 groupEvent 这样具有属性 group_id 的新表。 或者我应该创建一个包含 groupID 和 eventID 作为属性的数据透视表 group_event。

感谢您的帮助!!

【问题讨论】:

    标签: mysql database attributes


    【解决方案1】:

    我能想到的一种方法是让您摆脱 Event 表中的 user_id 外键,取而代之的是一个映射用户和事件的 User_Event 表和一个映射组和事件的 Group_Event 表。不确定这是否是您的用例的最佳设计,但这将避免在事件表中需要两个外键(其中一个对于每一行都是 NULL)。

    【讨论】:

      【解决方案2】:

      创建 2 个单独的表 Group_Event(id,group-id,event-id) 和 User_Event(id,user-id,event-id)。 这种方法的优点是

      • 查询将非常容易。
      • 您可以为一个用户添加多个事件。
      • 您可以为一个组添加多个事件。

      但是您应该确保在向 Group_Event 添加事件时 您还应该将相同的事件添加到 User_Event WHERE "User_Event.user-id" = "group_user.user_id" AND "group_user.group_id" = "Group_Event.group-id"。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-17
        • 1970-01-01
        • 2022-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多