在数据库中拥有自己的表还是将字段留空?

时间:2017-07-31 15:18:48

标签: mysql database attributes

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

  • 事件(id,title,date,user_id)
  • 组(id,name,creator_id)
  • 用户(身份证,姓名,电子邮件,......)
  • group_user(group_id,user_id)

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

用户可以创建事件,然后事件user_id是此用户ID。

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

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

感谢您的帮助!!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

创建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"。