0

我想在性能方面扩展这个问题。数据库架构是:

制作

  • MakeId
  • 品牌名称

模型

  • 型号 ID
  • 型号名称
  • 制造商 (FK)

车辆

  • 车辆编号
  • 购买日期
  • 型号 ID (FK)

如果我想知道车辆的制造商,我需要使用 Vehicle.Model.Make 遍历模型表。假设我没有三个而是 4 或 5 个以这种方式连接的表,因此我必须编写例如 InvoiceForVehicle.Vehicle.Model.Make。我认为这会导致查询性能不佳。

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

车辆发票

  • 发票编号
  • 创建日期
  • 车辆 ID (FK)
  • 制造商 (FK)

这是一个好主意吗?

4

2 回答 2

1

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

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

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

于 2012-12-12T20:47:15.913 回答
1

出于性能原因:也许

出于一致性原因:

使用您的建议,将有可能将车辆连接到与该车辆(的模型)不对应的制造商!

您可以尝试一直使用复合(也许是自然)键,并带有相应的复合外键。在这种情况下,重要的外键是 fromVehicle (MakeId, ModelId)Model (MakeId, ModelId)

于 2012-12-12T20:49:17.017 回答