Первичный ключ против внешнего ключа при извлечении объекта и связанных с ним данных в Entity Framework - PullRequest
0 голосов
/ 02 мая 2019

Если у меня есть четыре таблицы RecordProducts, Records, Products и Defendants с RecordProducts, имеющие эти значения в качестве идентификаторов для других трех таблиц.

RecordProductsId,
RecordId,
ProductId,
DefendantId

Когда я запускаю запрос моей структуры сущностей, чтобы получить RecordProduct и запись. Имя, имя продукта, имя ответчика. Имя и мой запрос объединяет, есть ли разница в производительности, если есть

  1. нет индекса для RecordId, ProductId и DefendantId?
  2. индекс первичного ключа для всех трех как один?
  3. отдельные внешние ключи в RecordId и ProductId
    • Я понимаю, что внешние ключи не являются кластеризованными индексами, но здесь это имеет значение

в качестве примера мой запрос выглядит примерно так

var recordProducts = context.RecordsProducts
            .Where(rp => rp.RecordId == input.RecordId && rp.IsActive == true)
            .Include(rp => rp.Record)
            .Include(rp => rp.Product)
            .Include(rp => rp.Defendant);

var recordProductsVM = recordProducts.Select(rp => new GetRecordProductsViewModel
        {
            Id = rp.Id,
            RecordName = rp.Record.Name ,
            ProductName = rp.Product.Name ,
            DefendantName = rp.Defendant.Name,
            ...
        });

1 Ответ

0 голосов
/ 03 мая 2019

Сохраняйте его реляционным, PK на идентификаторе RecordProduct и FK на продукте, записи и ответчике.С точки зрения производительности SQL справится.Альтернативой является использование составного ключа вместо RecordProductID.Лично я не являюсь поклонником их использования, поскольку составная запись часто может быть полезной сущностью, которую можно идентифицировать индивидуально.Т.е. передайте 1x ID против 3x ID при работе с этой конкретной комбинацией.

При использовании Select для уменьшения ваших сущностей до модели представления (Приятно видеть!) Вам не нужно использовать Include.EF создаст SQL и объединит таблицы на основе нужных вам данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...