假设我们有一个以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和SubjectId)上添加非聚集索引,存储UserId
外键是否可以提高查询性能?有副作用吗?还是有其他方法可以避免将父用户包括在每个相关实体中?任何建议表示赞赏。
假设我们有一个表ID为主键的Users,并且该用户具有以下相关实体:UserSubjects(SubjectId
如果需要UserId来查找主题,则Subject是“ Weak Entity”,并且UserID应该是其复合主键的开头。
UserSubjects(UserId <PK,FK>,SubjectId <PK>)