Target data model

Core schema created in this phase. All business tables are empty until imports are approved. Custom modules are added after code review.

Organizations

  • organizations

    root

  • org_units

    → organizations, → org_units (parent)

Identity & users

  • app_users

    legacy_moodle_user_id unique

  • user_profiles

    1:1 → app_users

  • external_identity_links

    → app_users; unique (issuer, subject)

  • user_org_memberships

    → app_users, organizations, org_units

Courses

  • course_categories

    → course_categories (parent), organizations

  • courses

    → course_categories, organizations

  • course_units

    → courses; unique (course, position)

  • learning_activities

    → courses, course_units; legacy module + instance

Enrolment & roles

  • enrolment_sources

    → courses

  • course_enrolments

    → enrolment_sources, app_users

  • user_course_roles

    → app_users, courses

Progress & grades

  • course_completions

    → app_users, courses

  • activity_completions

    → app_users, learning_activities

  • grade_items

    → courses, learning_activities

  • grades

    → grade_items, app_users

Assessments

  • assessments

    1:1 → learning_activities

  • questions

    versioned

  • attempts

    → assessments, app_users; unique attempt number

  • attempt_steps

    → attempts, questions; full step history

Credentials & files

  • credential_templates

    → courses

  • issued_credentials

    → credential_templates, app_users, file_assets; unique number

  • file_assets

    content hash + SHA-256; private by default

  • file_links

    → file_assets; owner/context + file area

Migration control

  • migration_plan_steps

    dependency order

  • migration_jobs

    → migration_plan_steps; guarded state machine

  • migration_exceptions

    → migration_jobs

  • legacy_crosswalk

    → migration_jobs; unique (source_table, source_id)

  • reconciliation_checks

    sign-off

  • audit_log

    written by triggers