有一种方法可以显示两个实体可以通过共同的第三实体链接?

问题描述 投票:0回答:1

没有乘客可以在同一天乘坐多辆车

    多人乘客可以乘坐汽车。
  1. 关于如何设计的任何想法/建议?
  2. 我只能弄清楚同时执行3个对抗中的任何2个,但不是全部3个。我的想法通常涉及与汽车或乘客实体的关系关联的日期实体。但是我似乎找不到在共同日期连接这两种关系的方法,以表明这辆乘客在这辆车上骑车是与租车相同的日期。
您所描述的是

cars

passengers

表之间的一个相当简单的多对多(m:m)。由于日期成为分辨率/相交表的属性,因此无需一个日期实体。您可以使用排除约束执行#1和#2。至于#3,没有什么可执行的,只需确保它不受限制即可。在给定的一天,审判可能是对汽车中乘客人数的限制。所以:
postgresql entity-relationship erd
1个回答
0
投票
create table cars( car_id integer generated always as identity primary key , vin text unique , capacity integer not null check (capacity > 0) --- other car attributes ); create table passengers( passenger_id integer generated always as identity primary key , name text --- other passenger attributes ) ; create table ridership( ridership_id integer generated always as identity primary key , car_id integer references cars(car_id) , passenger_id integer references passengers(passenger_id) , ride_date date not null , exclude using gist (car_id with =,ride_date with =) -- #1. No car can be booked multiple times on the same day , exclude using gist (passenger_id with =,ride_date with =) -- #2. No passenger can ride multiple cars on the same day ) ;

涉及涉及跨表的约束的极限例外;没有直接约束并非唯一的索引。我认为,它需要一个扳机。
我通常会创建一个演示,但现在被压迫了。我今天晚上创建一个。但是您可能想尝试一下!
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.