我正在 MySQL 中设计一个数据库,需要一些关于它的结构和表之间关系的指导。我已经确定了以下事实:
我有:
- 许多用户。(美好的)
- 一个用户有多个组织。(一 - 多)
- 一个组织有许多事件。(一 - 多)
- 一个用户有多个地址。(一 - 多)
- 一个组织有许多地址(一个 - 许多),但这些地址可能被另一个组织或事件使用。因此,许多组织有许多地址。(很多很多)
- 一个事件有一个地址。(一一)
- 一个组织有一个主要地址,但许多组织可能在同一个地址工作,所以(多 - 一)
这就是我卡住的地方,因为尽管组织或活动有地址,但他们并不拥有它,用户拥有。那么这些关系有必要吗?我是否需要定义外键关系,或者没有它们我可以逃脱吗?我是否需要维护一个单独的默认地址表,因为 2 个组织可以使用相同的地址,但它不是一个的默认地址,因此在地址表中引用它会有问题(哪个实际上是主地址)?
还是我以一种过于复杂的方式看待这个问题?也许让用户维护地址,然后当他们添加组织时,该组织引用该地址但对其他地址一无所知(对于组织来说是一对一关系还是对于地址是多一关系?显然删除了一个组织不应该意味着删除地址,反之亦然)。
然后,当添加一个事件时,它也只是引用一个地址,但可以查找它所属组织的默认地址。出现与上述相同的问题。事件位于该地址,但该地址不属于该事件,反之亦然。
这几乎将其简化为:
- 一个用户,许多事件。
- 一个用户,多个组织。
- 一个用户,多个地址。
- 一个组织,一个地址。
- 一个事件,一个地址。
这是看待这个问题的正确方法吗?是否有任何我似乎没有考虑到的困难?有没有更好的方法来解决这个问题?我遇到的最大问题是如何将表格相互关联,以便我可以相应地设置关系。
-- 编辑:添加信息
进一步考虑,可能不止一个组织正在举办同样的活动。我也希望能够链接事件。这些组织可以由不同的用户添加,但都需要相关。这是 MySQL 可以轻松处理的事情,还是我应该查看其他类型的数据库逻辑,例如图形数据库?