【问题标题】:Using relationship table's ID in other tables在其他表中使用关系表的 ID
【发布时间】:2016-01-21 12:10:30
【问题描述】:

我有 2 个使用关系表 (ManyToMany) 关联的实体,然后我有一个定价表,其中包含医院服务的定价信息。如果链接到服务的医院不同,则此表可以对相同服务有不同的定价。

hospitals:
id name 

services:
id name

hospital_service:
hospital_id service_id

service_pricing:
id hospital_id service_id weight_range_id LH_price SH_price

service_duration:
id hospital_id service_id weight_range_id LH_duration SH_duration

现在我的问题是我应该重写 service_pricing 表中的 hospital_id 与 service_id 信息吗?这不是重复数据吗?我已经在 Hospital_service 表中有这些信息。

(我对 service_duration 表的问题也是如此)

我想做的事, 我决定在关系表 (hospital_service) 中添加一个 ID 列,并将其用作 service_pricing 表中的外键。

在我的情况下,这是一个足够好的解决方案吗?我正在为此使用 Laravel 的 Eloquent ORM,所以我怎么说“获取医院 2 的服务 7 的定价”?

编辑: 向 service_pricing 和 service_duration 表添加了附加信息,定价/持续时间取决于 weight_range_id 及其是否为 LH / SH。

【问题讨论】:

    标签: php mysql database laravel-4 eloquent


    【解决方案1】:

    我是否应该在 服务定价表?

    如果你愿意,你可以。无论哪种方式都有效,这只是最方便的问题。如果键是一个字段而不是两个字段,则加入 service_pricingservice_duration 表会更容易一些。

    这不是重复数据吗?我已经有了这些信息 Hospital_service 表。

    不,它不被认为是多余的,因为它是连接记录的键值。您必须在外键中也有该值才能建立连接。

    我正在为此使用 Laravel 的 Eloquent ORM,所以我怎么说“get 医院 2 的服务 7 定价?

    我不熟悉那个框架,而 laravel.com 目前似乎已经关闭。对应的 SQL 类似于:

    select
      weight_range_id, LH_price, SH_price
    from
      service_pricing
    where
      hospital_id = 2
      and service_id = 7
    

    如果您决定在 hospital_service 表中添加另一个 id,则需要加入该表以进行该查询:

    select
      p.weight_range_id, p.LH_price, p.SH_price
    from
      service_pricing p
      inner join hospital_service hs on hs.is = p.hospical_service_id
    where
      hs.hospital_id = 2
      and hs.service_id = 7
    

    【讨论】:

      【解决方案2】:

      我会使用如下表格:

      hospitals:
          id
          name 
      
      services:
          id
          name
      
      hospital_service:
          hospital_id
          service_id
          price
          duration
      

      没有重复数据。 hospital_service 是用于连接服务和医院的多对多表。

      Hospitals
      ID:NAME
      1:hostiptal a
      2:hospital b
      
      Services
      ID:NAME
      1:service a
      2:service b
      
      hospital_service
      HOSPITAL_ID:SERVICE_ID:DURATION(minutes):PRICE(euro)
      1:1:30:100
      1:1:60:180
      1:2:180:500
      

      服务“服务 a”30 分钟收费 100,60 分钟收费 180。

      编辑:

      您有更多选择,其中两个是: 1.您可以插入更多服务,例如。

      service a-lh
      service a-sh
      service b-lh
      service b-sh
      

      然后是每项服务的价格 或:

      2.

      HOSPITAL_ID:SERVICE_ID:DURATION(minutes):PRICE(euro):SERVICE TYPE
      1:1:30:100:lh
      1:1:60:120:sh
      1:2:60:180:lh
      2:2:180:500:lh
      

      【讨论】:

      • 定价和持续时间表比我在问题中描述的要复杂一些。每项服务的定价取决于一个附加信息 (coat_length)。让我添加这个细节。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      相关资源
      最近更新 更多