在其他表中使用关系表's ID


Using relationship table's ID in other tables

我有两个实体,它们使用关系表(manymany)相互关联,然后我有一个价格表,其中包含医院服务的定价信息。如果与该服务相关联的医院不同,则此表对同一服务可以有不同的定价。

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

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

(同样是我与service_duration表的问题)

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

在我的情况下这是一个足够好的解决方案吗?我使用的是Laravel的Eloquent ORM,那么我怎么说"获取医院2的服务7的定价"呢?

编辑:在service_pricing和service_duration表中添加了额外的信息,pricing/duration取决于weight_range_id和它是否为LH/SH.

我应该重写hospital_id vs service_id信息service_pricing表吗?

如果你想的话可以。无论哪种方式都可以,只是看哪种方式最方便。如果键是一个字段而不是两个,那么连接service_pricingservice_duration表会更容易一些。

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

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

我使用的是Laravel的Eloquent ORM,所以我怎么说"get"呢服务定价7医院2"?

我不熟悉那个框架,而且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

我会使用这样的表:

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

服务"Service 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