数据库关系遍历多个表

时间:2012-12-12 20:39:28

标签: c# entity-framework database-design

我想在性能方面扩展this question。 db模式是:

制作

  • MakeId
  • MakeName

模型

  • ModelId
  • MODELNAME
  • MakeId(FK)

车辆

  • VehicleId
  • 购置日期
  • ModelId(FK)

如果我想知道车辆 Make ,我需要使用Vehicle.Model.Make遍历Model表。让我们假设我没有三个而是4或5个以这种方式连接的表,所以我必须写例如InvoiceForVehicle.Vehicle.Model.Make。我认为这会导致查询性能下降。

我可以在InvoiceForVehicle表中添加一个额外的列 MakeId(FK),该表直接转到make。这意味着我有重复的数据,每次我改变InvoiceForVehicle和车辆之间的关系时,我都必须相应地更新 MakeId(FK)

InvoiceForVehicle

  • InvoiceId
  • dateCreated会
  • VehicleId(FK)
  • MakeId(FK)

这是个好主意吗?

2 个答案:

答案 0 :(得分:1)

我怀疑你会看到很多命中(如果有的话),因为你将通过ID引用而不进行任何实际搜索。

我认为(根据我的知识)您现有的模型比新提出的解决方案更正确。您不应该将自己置于可能会丢失数据完整性的情况,就像新解决方案允许的那样。

所以回答你的问题。不,我不认为新想法是一个很好的解决方案。根据数据库常规格式,您现有的设置更“正确”。此外,由于Entity Framework延迟加载数据,您实际上不会运行任何不需要的查询。

答案 1 :(得分:1)

出于性能原因:可能

出于一致性原因:

使用您的建议,可能会有一辆连接到Make的车辆与该车辆的(型号)不对应!

您可以尝试使用复合(也可能是自然的)键,使用相应的复合外键。在这种情况下,重要的外键是Vehicle (MakeId, ModelId)Model (MakeId, ModelId)