子表上的外键取决于父字段

时间:2010-05-03 15:40:04

标签: sql-server database database-design relational-database

使用SQL2005 / 2008。 假设我有一张酒店餐桌(HotelID,HotelName)和一张房间餐桌(RoomID,HotelID,RoomName)酒店 - >房间1:M by HotelID RoomID是房间内的PK 现在我有一个合同表(ContractID,HotelID,ContractDescription)和ContractRate(ContractRateID,ContractID,RoomID,Rate) 所有原色和外键定义但是, ¿将ContractRate中的RoomID与Room相关联的最佳方法是什么,考虑到RoomID只能来自RoomID中与HotelID相关的值? 目前我在ContractRate.RoomID上有一个FK - > Room.RoomID但是这需要Room.HotelID的额外过滤器是ContractRate - > Contract.HotelID,我可以在应用程序中强制执行,但想知道是否可以在数据库中定义/强制执行(或者如果我必须重新定义数据库) 最好的注册, Juanro

1 个答案:

答案 0 :(得分:1)

我认为您必须将RoomID放在合同和ContractRate表中以进行规范化。 但是在目前的情况下,根据我的建议,没有人进行Normilization,所以将hotelID和RoomID放在两个表中。