我有4张桌子。
表1 = Airlines
Airline_ICAO_Code varchar(3) Not NULL Primary key,
Airline varchar(22) NULL
表2 = Destinations
Airport_ICAO_Code varchar(4) Not NULL Primary key,
Destination varchar(30) NULL
表3 = Airlines2Destinations
ID int IDENTITY(1,1) NOT NULL,
Airport_ICAO_Code varchar(4) Not NULL Foreign Key References Destinations(Airport_ICAO_Code),
Destination varchar(30) NULL,
Airline_ICAO_Code varchar(3) Not NULL Foreign Key References Airlines(Airline_ICAO_Code),
Airline varchar(22) NULL
表4 = Airlines2DestinationsPrices
ID int IDENTITY(1,1) NOT NULL,
Airport_ICAO_Code varchar(4) Not NULL Foreign Key References Destinations(Airport_ICAO_Code),
Destination varchar(30) NULL,
Airline varchar(22) NULL,
Airline_ICAO_Code varchar(3) Not NULL Foreign Key References Airlines(Airline_ICAO_Code),
Departure smalldatetime,
Price smallmoney
我的问题是如何在表3和表4之间强制执行参照完整性。这是必要的,因为表4中输入的路由必须出现在表3中。我需要建议在表上设置主键的方法3和表4将使我能够做到这一点。
我正在考虑在表3中使用复合键,如下所示:
Primary Key(Airport_ICAO_Code,Airline_ICAO_Code)
或将Airport_ICAO_Code
和Airport_ICAO_Code
列连接到新列并删除ID列。
如果我使用Identity
列作为两个表的主键,则无法保证表4中路由的ID与表3中的路由ID相匹配。
由于所有这些选择,我不确定前进的最佳方式。如果有人可以花时间来帮助解决这个问题,那将非常感激。
感谢您提供的任何帮助
编辑:
在收到Marc在下面的帖子中的建议后,我按如下方式设置了表4。但是这张桌子上没有主键。 ID列是否更适合主键,或者我可以使用像Primary Key (Airlines2DestinationsID,Departure).
Table 4 = Airlines2DestinationsPrices
ID int IDENTITY(1,1) NOT NULL,
Airlines2DestinationsID INT NOT NULL
FOREIGN KEY REFERENCES dbo.Airlines2Destiations(ID),
Departure smalldatetime,
Price smallmoney
答案 0 :(得分:1)
基本上,如果表4中的任何一个条目总是属于表3中的单个条目,我只会将Airlines2Destiations.ID
作为外键存储到表4中。
这样,表4的每个条目总是清晰且唯一地连接到表3中的单个条目。另外:从表4中删除所有减少 - 您只需要对表3的引用 - 您无需重复航空公司或机场代码和名称。
表3 = Airlines2Destinations
ID int IDENTITY(1,1) NOT NULL,
Airport_ICAO_Code CHAR(4) NOT NULL
Foreign Key References Destinations(Airport_ICAO_Code),
Destination VARCHAR(30) NULL,
Airline_ICAO_Code CHAR(3) NOT NULL
Foreign Key References Airlines(Airline_ICAO_Code),
Airline VARCHAR(22) NULL
表4 = Airlines2DestinationsPrices
ID int IDENTITY(1,1) NOT NULL,
Airlines2DestinationsID INT NOT NULL
FOREIGN KEY REFERENCES dbo.Airlines2Destiations(ID),
Departure smalldatetime,
Price smallmoney