在这种情况下,模型之间需要哪些关联?

时间:2010-11-24 10:57:37

标签: ruby-on-rails data-modeling database-schema

我正在使用rails制作预订系统。

我有3个模特 - 访客,房间和预订。

访客可留在房间内。

预订可以有很多访客,可以在很多房间(或共享)。预订也有开始/结束日期。

访客可能会在预订中的房间之间移动,并且需要知道这些房间分配的开始/结束日期。

单个联接表是否足够?即visitor_id,room_id,booking_id?

或者这些模型之间的关联如何?我需要额外的表格,即房间分配。

非常感谢。

4 个答案:

答案 0 :(得分:1)

我认为你应该有room_allocations表。

答案 1 :(得分:0)

  

访客可能会移动   在预订的房间之间,和   这些房间的开始/结束日期   需要知道分配。

如果访客更换房间,是否可以创建新预订?在这种情况下,您不需要附加表。

答案 2 :(得分:0)

  

预订可以有很多访客   在许多房间(或共享)。一个   预订也有开始/结束日期。

目前尚不清楚'或共享'是什么意思。

否则,一般程序是列出您的实体,然后定义它们之间的关系。它会是这样的 - 我不是想在这里给出明确的答案,而是为了说明如何思考它:

<强>实体

首先尝试定义属性并将它们分组为实体。制作数据字典很不错,特别是如果在团队中工作。

<强>关系

尝试具体说 - 与给予关系一个名称(语义 非常重要的系统设计)相比,预订 许多访问者的帮助不太有用。 / p>

预订预订的访客/访客所做的预订更好,因为您可以通过它来区分与姓名的关系:预订是为了预订的访客/访客(并且还可以帮助您实现,如果您同时拥有并帮助确定基数;以两种方式命名它们也会有所帮助,尽管有时候您最终会使用笨拙的语言 - 这可能是也可能不是设计的指示问题;例如这里预订了预订的访客听起来很糟糕,如果预订本身不是关系表,我会质疑 - weak entity)。

所以,如果你确实去了所有的关系,我们可以更精确地回答你。

注意:具有三向多对多关系表可以在non-trivial way中进行非规范化。规范化非常重要的原因之一不是拥有漂亮,理想化的数据库设计,而是能够管理数据库中潜在的不一致性(如果您决定使用非规范化设计来了解数据库的异常情况)可以代表;直到3NF才明显。

答案 3 :(得分:0)

这样的事情应该让你开始:

alt text

可能有更简洁的方式来涵盖Booking&amp;房间预订。在OO术语中,您可以使用复合模式对其进行建模。这可能会使逻辑更清晰。你当然还需要映射到表格;是否值得探索取决于您的应用程序的更广泛需求。

第h