Допустим, у нас есть таблица Users
с ID
в качестве первичного ключа, и у пользователя есть следующие связанные сущности:
UserSubjects(SubjectId <PK>,UserId <FK>)
SubjectPapers(PaperId<PK>,SubjectId<FK>)
Теперь, согласно приведенным выше таблицам, по соображениям безопасности userId
необходимо передать в качестве параметра, чтобы получить все SubjectPapers
для Subject
, которые связаны с пользователем, вместо того, чтобы просто передавать SubjectId
.
возьмем этот метод, например:
public List<SubjectPaper> GetBySubject(int userId, int subjectId)
{
return _context.SubjectPapers
.Include(k => k.UserSubject)
.Where(k => k.SubjectId == subjectId && k.UserSubject.UserId == userId)
.ToList();
}
В описанном выше методе пользователь должен быть включен в запрос, чтобы подтвердить, что он делает запрос на получение одного из своих субъектов.
Что, если также SubjectPapers
имеет больше связанные сущности теоретически. Улучшит ли сохранение внешнего ключа UserId
производительность запроса за счет добавления некластеризованного индекса в оба столбца (UserId и SubjectId)? Есть ли побочные эффекты? или есть ли другой способ избежать включения родительского пользователя в каждую связанную сущность? Любые предложения приветствуются.