0

我正在 MySQL 中设计一个数据库,需要一些关于它的结构和表之间关系的指导。我已经确定了以下事实:

我有:

  • 许多用户。(美好的)
  • 一个用户有多个组织。(一 - 多)
  • 一个组织有许多事件。(一 - 多)
  • 一个用户有多个地址。(一 - 多)
  • 一个组织有许多地址(一个 - 许多),但这些地址可能被另一个组织或事件使用。因此,许多组织有许多地址。(很多很多)
  • 一个事件有一个地址。(一一)
  • 一个组织有一个主要地址,但许多组织可能在同一个地址工作,所以(多 - 一)

这就是我卡住的地方,因为尽管组织或活动有地址,但他们并不拥有它,用户拥有。那么这些关系有必要吗?我是否需要定义外键关系,或者没有它们我可以逃脱吗?我是否需要维护一个单独的默认地址表,因为 2 个组织可以使用相同的地址,但它不是一个的默认地址,因此在地址表中引用它会有问题(哪个实际上是主地址)?

还是我以一种过于复杂的方式看待这个问题?也许让用户维护地址,然后当他们添加组织时,该组织引用该地址但对其他地址一无所知(对于组织来说是一对一关系还是对于地址是多一关系?显然删除了一个组织不应该意味着删除地址,反之亦然)。

然后,当添加一个事件时,它也只是引用一个地址,但可以查找它所属组织的默认地址。出现与上述相同的问题。事件位于该地址,但该地址不属于该事件,反之亦然。

这几乎将其简化为:

  • 一个用户,许多事件。
  • 一个用户,多个组织。
  • 一个用户,多个地址。
  • 一个组织,一个地址。
  • 一个事件,一个地址。

这是看待这个问题的正确方法吗?是否有任何我似乎没有考虑到的困难?有没有更好的方法来解决这个问题?我遇到的最大问题是如何将表格相互关联,以便我可以相应地设置关系。

-- 编辑:添加信息

进一步考虑,可能不止一个组织正在举办同样的活动。我也希望能够链接事件。这些组织可以由不同的用户添加,但都需要相关。这是 MySQL 可以轻松处理的事情,还是我应该查看其他类型的数据库逻辑,例如图形数据库?

4

1 回答 1

-1

这实际上取决于您的用例。当然,让用户或组织共享一个地址(因此,一个地址表)在技术上似乎是正确的,但它可能会增加不必要的复杂性。想想你将如何查询你的数据库(尝试前瞻性的思考——你以后想做什么?)并设计你的表来支持这些查询。

您不必在数据库中有外键约束。实际上,我看过的大多数数据库都没有它们,业务逻辑处理检查记录的完整性。我再次建议您对此保持务实,并做您喜欢构建和支持的事情。

于 2012-04-06T15:48:14.650 回答