【问题标题】:Database do I need to de-normalize a related field?数据库我需要对相关字段进行反规范化吗?
【发布时间】:2018-06-01 20:25:59
【问题描述】:

我的数据库中有两个表:

  • 包含有关包裹的所有信息,例如跟踪、重量。

  • 发货

    包含正在运送的已到达仓库的包裹列表。带状态属性:

    在途、延误、海关、交付

问题是: 用户可以查看他们的包裹,我通过从包裹所属的货件中查询包裹来向他们展示当前包裹状态。 我是否需要在 Package 表上创建 shipment_status 列,并且在更新发货状态时,运行查询更新每个包裹的该列?还是目前的解决方案是最好的?

【问题讨论】:

    标签: sql ruby-on-rails database database-design


    【解决方案1】:

    不,你不需要。当你需要发货状态时,如果你真的想做一个Packages查询并包含发货状态,你可以做一个join。

    例如,

    Packages.joins(:shipment).where(user_id: current_user.id).select('packages.*, shipments.status as shipment_status')
    

    这将替代

    current_user.packages
    

    通过连接,您将拥有一个带有 shipment_status 方法的 Package 对象。

    【讨论】:

    • 这样的视图可以查询吗:<% if package.shipment %> <%= package.shipment.status %> <% else %> <%= package.delivery_status %><% end %>(Package.delivery_status是关于包裹是否到达仓库)
    • 是的,这完全没问题。但是,它可能会在您调用.shipment 时对数据库进行单独的查询。请小心并在适当的时候使用急切加载。
    猜你喜欢
    • 2011-01-11
    • 2011-01-06
    • 2015-09-22
    • 2020-07-31
    • 2018-01-27
    • 1970-01-01
    • 2020-07-07
    • 2012-12-24
    • 1970-01-01
    相关资源
    最近更新 更多