我想在性能方面扩展this question。 db模式是:
制作
模型
车辆
如果我想知道车辆的 Make ,我需要使用Vehicle.Model.Make遍历Model表。让我们假设我没有三个而是4或5个以这种方式连接的表,所以我必须写例如InvoiceForVehicle.Vehicle.Model.Make。我认为这会导致查询性能下降。
我可以在InvoiceForVehicle表中添加一个额外的列 MakeId(FK),该表直接转到make。这意味着我有重复的数据,每次我改变InvoiceForVehicle和车辆之间的关系时,我都必须相应地更新 MakeId(FK)。
InvoiceForVehicle
这是个好主意吗?
答案 0 :(得分:1)
我怀疑你会看到很多命中(如果有的话),因为你将通过ID引用而不进行任何实际搜索。
我认为(根据我的知识)您现有的模型比新提出的解决方案更正确。您不应该将自己置于可能会丢失数据完整性的情况,就像新解决方案允许的那样。
所以回答你的问题。不,我不认为新想法是一个很好的解决方案。根据数据库常规格式,您现有的设置更“正确”。此外,由于Entity Framework
延迟加载数据,您实际上不会运行任何不需要的查询。
答案 1 :(得分:1)
出于性能原因:可能
出于一致性原因:否
使用您的建议,可能会有一辆连接到Make的车辆与该车辆的(型号)不对应!
您可以尝试使用复合(也可能是自然的)键,使用相应的复合外键。在这种情况下,重要的外键是Vehicle (MakeId, ModelId)
到Model (MakeId, ModelId)
。