数据库设计 - 管理这些关系的最佳方式

时间:2011-07-22 08:49:57

标签: database database-design

我正在开发一个项目(基于Django,虽然这与我的问题并不相关),我正在努力找出表示数据模型的最佳方法。

我有以下四种模式:

用户, 客户, 会议, 位置

用户和客户通过会议模式建立多对多关系。会议模型与位置模型具有一对一的关系。

会议将在以下两个地方举行:

  1. 用户(或UserProfile)模型中定义的地址
  2. 客户端模型中定义的地址。
  3. 其他一些必须在以后定义的位置。
  4. 我正在努力找出存储位置数据的最佳方法,以使其尽可能干净和可重复使用。

    • 我考虑过将Location作为Meetings模型中的字段而不是模型本身 - 虽然如果在同一位置创建了大量会议,这也可能导致冗余数据,所以这可能是一个非起动

    • 我可以为每个创建的用户和客户端自动创建位置记录,并使用相关记录之间的通用关系,但是,据我所知,这可能导致数据库性能低下。此外,并非每个客户/用户都能够在其位置举行会议。

    任何人都可以看到更整洁的选择吗?

    任何建议表示赞赏。

    感谢。

2 个答案:

答案 0 :(得分:1)

  

我考虑过将Location作为会议模型中的字段   而不是一个模型本身 - 虽然这也可能导致   如果在同一位置创建了大量会议,则为冗余数据,   所以这可能不是首发。

不,这是真正好的想法,因为它直接指出了真正的问题。

真正的问题是会议与参加会议的各方之间存在差异。会议有一些与参加者无关的属性:它至少有一个时间和地点。

所以我认为你应该改变你对会议模式的看法。

而不是用户通过会议模型与客户建立M:N关系,他们应该通过例如出勤模型建立M:N关系。 (注册或预订或MightAttend模型可能更适合您。)会议模型应该更改以反映现实世界会议的独特属性:时间和地点。

答案 1 :(得分:1)

我希望会议和地点有多对一的关系。一个位置不能用于多个会议吗? (当然,在不同的时间)

在我看来,一个位置的属性超出了单次会议的使用范围。示例:座位容量。