Skip to main content

LMS Indexing and Query Patterns

Summary

Source-backed logical index and EF query-pattern reference.

Audience

Engineering, QA, architecture, product, support, and performance reviewers.

Reference Content

The migration contains 38 indexes, including eight unique constraints. Important logical patterns are:

ObjectImportant index intent
All tenant domain objectsTenant lookup
CourseTenant plus course code, unique
Module/LessonTenant plus parent plus sequence
Learning path/linkTenant plus name, unique; tenant/path/course, unique; tenant/path/sequence
EnrollmentTenant/subject/course, unique; tenant/status
CompletionTenant/enrollment, unique
CertificateTenant/certificate identity, unique; tenant/status
AttemptTenant/assessment/subject
SessionTenant/status/start
EvidenceTenant/occurrence
OutboxEvent identity, unique; status/occurrence
Processed eventEvent identity, unique

Reads commonly use AsNoTracking, tenant filters, ordering, direct projections, count/average aggregates, and selected Include for path links or assessment questions. Reports execute multiple aggregate queries. Exports load full filtered sets into memory before joining/building output.

Audit/timeline/outbox reads are bounded, and outbox delivery selection uses a batch size. Most domain lists, reports, and exports have no pagination. No compiled queries, raw SQL, stored procedures, split-query configuration, query tags, cache, or explicit database retry strategy was found.

Source References

  • microservices/src/training-service/Infrastructure/TrainingDbContext.cs
  • microservices/src/training-service/Api/TrainingEndpoints.cs
  • microservices/src/training-service/Infrastructure/Persistence.cs
  • microservices/src/training-service/Infrastructure/Migrations/20260708143457_InitialTrainingSchema.cs

See Also

Keywords

  • LMS database
  • Training persistence
  • Source-backed model

Revision Information

  • Status: Draft
  • Last reviewed: 2026-07-17
  • Review cycle: Quarterly