【问题标题】:What associations do I need between models in this scenario?在这种情况下,我需要模型之间的哪些关联?
【发布时间】:2011-05-15 00:56:07
【问题描述】:

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

我有 3 个模型 - 访客、房间和预订。

访客可以留在房间里。

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

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

这里一个连接表就足够了吗? IE。访客 ID、房间 ID、预订 ID?

或者这些模型之间的关联看起来如何?我需要额外的桌子,即房间分配吗?

非常感谢。

【问题讨论】:

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


    【解决方案1】:

    我认为你应该有 room_allocations 表。

    【讨论】:

    • 我认为这可能是要走的路,还有一个 room_allocation_visitors 表。谢谢。
    【解决方案2】:

    访客可能会搬家 预订内的房间之间,以及 这些房间的开始/结束日期 需要知道分配情况。

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

    【讨论】:

    • 我希望所有详细信息都包含在一次预订中,而不是每次访客转移房间时都创建新预订。我认为房间分配表是最合适的。还是谢谢。
    【解决方案3】:

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

    不清楚你所说的“或共享”是什么意思。

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

    实体

    首先尝试定义您的属性并将它们分组为实体。制作数据字典很好,尤其是在团队工作时。

    关系

    尽量具体一点 - 说预订可以拥有很多访问者与给关系命名相比,没有那么有用(语义在系统设计中非常重要)。

    booking made by visitor(s)/visitor(s) book a booking 更好,因为它可以让您区分与名称的关系:booking 是为已预订的访客/访客(还可以帮助您了解您是否同时拥有两者并帮助确定基数;以两种方式命名它们也有帮助,尽管有时您最终会使用尴尬的语言 - 这可能表示设计,也可能不表示设计问题;例如这里 visitor(s) booking a booking 听起来很糟糕,这让我怀疑 booking 本身是否不是关系表 - weak entity)。

    所以,如果你去说出所有关系的名字,我们可以更准确地回答你。

    注意:可以在non-trivial way 中对三向多对多关系表进行非规范化。规范化非常重要的原因之一不是要有漂亮的、理想化的数据库设计,而是能够管理数据库中潜在的不一致性(例如 - 如果您决定进行非规范化设计以了解您的数据库的异常情况可以表示;在3NF 之前,这些都是相当明显的)。

    【讨论】:

      【解决方案4】:

      这样的事情应该可以帮助您入门:

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

      第一次。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多