[英]SQL multiple foreign keys vs single foreign key on multiple tables
我试图弄清楚如何在数据库中定义外键。
假设我有三个表:
现在,
Site-Warehouse
是一对多关系 Warehouse-WarehouseLocation
是一对多关系 我什么时候用多个外键来描述WarehouseLocation
,一个到Warehouse.id
,一个到Site.id
?
Site --[ Warehouse
| ---
| |
+----[ WarehouseLocation
什么时候使用:
Site --[ Warehouse --[ WarehouseLocation
在第一个选项中,当我查询WarehouseLocation
我将需要Site.id
和Warehouse.id
。
在第二个选项中,当我查询WarehouseLocation
我需要Warehouse.id
,但是要查询仓库,我需要Site.id
我对哪种选择适合哪种情况感到困惑。 有人可以给我一些两种选择的利弊提示吗?
TL; DR
第二个选项是您应该查看的内容。 那是,
WareHouseLocation
表将仅具有WareHouseID
作为外键,而WareHouse
表将具有SiteID
作为外键。
说明
您必须从功能角度而不是查询角度来看它。 WareHouseLocation
指定Warehouse
的位置。 因此,这种关系是有意义的(即外键似乎是适当的)。 但是,如果您考虑一下, WarehouseLocation
确实与Site
无关。 因此,纯粹从功能的角度来看,这种关系没有多大意义。
但是,从查询的角度看,它看起来很棒,因为在大多数情况下(如果不是全部情况下)在WareHouseLocation
表上进行查询时,您需要检索SiteID
和WareHouseID
。 使它们在同一表中随时可用将减少JOIN
,并使查询变得容易得多。 就数据库设计而言,这似乎是您难题的症结所在。
数据库设计是一个非常复杂的主题,其中涉及很多考虑因素,其中一些因素非常适合项目本身。 一般的经验法则是保持数据库尽可能规范化 ( 尤其是在阅读教科书时 )。 但是,实际上,许多数据库设计人员都希望对数据库进行非规范化,以达到至少现有的水平。 对数据库进行规范化/非规范化是一个自以为是的主题,因此在此我将不再赘述。 您可以在以下文章中阅读有关它的更多信息:
希望这可以帮助!!!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.