如何在sql设计中解决这个风扇陷阱

时间:2016-05-15 16:50:31

标签: sql

我有这个3桌,可用的旅行,国家和地点。我的ERD设计中的关系是

位置| M-1 |国家| 1-M |可用旅行

这是我对决议的尝试

create table country 
(
countryID int not null IDENTITY(1,1)  PRIMARY KEY,
countryName varchar(50), 
passportRegulation text, 
currency varchar(20),
)


 create table location
 (
locationID int not null IDENTITY(1,1)  PRIMARY KEY,
locationName varchar(100), 
countryID int references country(countryID)on delete cascade 
)

create table availableTrip
(
availableTripID int  not null IDENTITY(1,1)  PRIMARY KEY,
countryID int references country(countryID),
locationID int references location(locationID)
)

如果我有两个外键添加到可用行程中,是否可能是正确的,但我觉得这是多余的,因为根据位置我可以知道国家。我有点迷失了这个设计的方向

1 个答案:

答案 0 :(得分:1)

假设countryId需要与locationId中的国家/地区匹配,那么您只需要locationId中的availableTrip

您可以使用联接查找相应的国家/地区:

select avt.*, l.countryid
from availabletrip avt join
     location l
     on avt.locationid = l.locationid;

如果countryId可能与locationId不同,那么您需要两列。