Index: iknow-api/Data/AppDbContext.cs
===================================================================
--- iknow-api/Data/AppDbContext.cs	(revision 1b20b226a74790f84dc06dc488f4f761b510a3f2)
+++ iknow-api/Data/AppDbContext.cs	(revision 20df1a33a74bc8c0aacbab3ab6c1e43df4734d41)
@@ -290,13 +290,9 @@
                 e.HasKey(p => p.Id);
                 e.Property(p => p.Id).HasColumnName("id");
-                e.Property(p => p.UserId).HasColumnName("user_id");
                 e.Property(p => p.EnrollmentInfoId).HasColumnName("enrollment_id");
                 e.Property(p => p.Amount).HasColumnName("amount");
 
-                e.HasOne(p => p.User)
-                 .WithMany(u => u.Payments)
-                 .HasForeignKey(p => p.UserId)
-                 .OnDelete(DeleteBehavior.Cascade);
-
+                // No user_id: the student comes from the enrolment. Removing it
+                // was the BCNF fix from Phase 5 (enrolled_id -> user_id).
                 e.HasOne(p => p.EnrolledSemesters)
                  .WithMany(es => es.Users)
Index: iknow-api/Models/Payment.cs
===================================================================
--- iknow-api/Models/Payment.cs	(revision 1b20b226a74790f84dc06dc488f4f761b510a3f2)
+++ iknow-api/Models/Payment.cs	(revision 20df1a33a74bc8c0aacbab3ab6c1e43df4734d41)
@@ -1,16 +1,16 @@
-using System.ComponentModel.DataAnnotations.Schema;
-
 namespace iknow_api.Models
 {
+    /// <summary>
+    /// The student is reached through the enrolment: enrolled_id -> user_id.
+    /// A user_id here would be redundant and could contradict the enrolment,
+    /// which is the BCNF violation found during normalization (Phase 5).
+    /// </summary>
     public class Payment
     {
         public int Id { get; set; }
 
-        public int UserId { get; set; }
-        public User? User { get; set; }
         public int EnrollmentInfoId { get; set; }
         public int Amount { get; set; }
         public EnrolledSemesters? EnrolledSemesters { get; set; }
-
     }
 }
Index: iknow-api/Models/User.cs
===================================================================
--- iknow-api/Models/User.cs	(revision 1b20b226a74790f84dc06dc488f4f761b510a3f2)
+++ iknow-api/Models/User.cs	(revision 20df1a33a74bc8c0aacbab3ab6c1e43df4734d41)
@@ -28,7 +28,4 @@
         public ICollection<UserDocuments>? Documents { get; set; }
 
-        // Named for the relationship it carries: Users 1 --pays-- N Payment.
-        public ICollection<Payment>? Payments { get; set; }
-
         // Users 1 --submits-- N EnrolledSemesters
         public ICollection<EnrolledSemesters>? Enrolments { get; set; }
Index: sql/data_load.sql
===================================================================
--- sql/data_load.sql	(revision 1b20b226a74790f84dc06dc488f4f761b510a3f2)
+++ sql/data_load.sql	(revision 20df1a33a74bc8c0aacbab3ab6c1e43df4734d41)
@@ -115,9 +115,9 @@
 (3, 1, 'tok_old789_stefan', '2026-01-01 00:00:00', FALSE);
 
-INSERT INTO payment (id, user_id, enrollment_id, amount) VALUES
-(1, 1, 1, 200),
-(2, 1, 2, 200),
-(3, 2, 3, 400),
-(4, 3, 4, 200);
+INSERT INTO payment (id, enrollment_id, amount) VALUES
+(1, 1, 200),
+(2, 2, 200),
+(3, 3, 400),
+(4, 4, 200);
 
 INSERT INTO major_subjects (major_id, subject_id, mandatory_semester) VALUES
Index: sql/iknow.dbml
===================================================================
--- sql/iknow.dbml	(revision 1b20b226a74790f84dc06dc488f4f761b510a3f2)
+++ sql/iknow.dbml	(revision 20df1a33a74bc8c0aacbab3ab6c1e43df4734d41)
@@ -150,5 +150,4 @@
 Table project.payment {
   id integer [pk, increment]
-  user_id integer [not null]
   enrollment_id integer [not null]
   amount integer [not null]
@@ -188,5 +187,4 @@
 Ref: project.contact.user_id - project.users.id                      // has_contact (1:1)
 Ref: project.token.user_id > project.users.id                        // has_token
-Ref: project.payment.user_id > project.users.id                      // pays
 Ref: project.payment.enrollment_id > project.enrolled_semesters.id   // for_enrollment
 Ref: project.enrolled_semesters.user_id > project.users.id           // submits
Index: sql/schema.md
===================================================================
--- sql/schema.md	(revision 1b20b226a74790f84dc06dc488f4f761b510a3f2)
+++ sql/schema.md	(revision 20df1a33a74bc8c0aacbab3ab6c1e43df4734d41)
@@ -111,5 +111,4 @@
     payment {
         integer id PK
-        integer user_id FK
         integer enrollment_id FK
         integer amount
@@ -136,5 +135,4 @@
     users               ||--o| contact            : has_contact
     users               ||--o{ token              : has_token
-    users               ||--o{ payment            : pays
     users               ||--o{ enrolled_semesters : submits
     users               ||--o{ user_documents     : owns
@@ -184,2 +182,5 @@
   they differ.
 - `professour_subjects` keeps the spelling used by the table in `schema_creation.sql`.
+- `payment` has no `user_id`: the student is reached through `enrollment_id`.
+  Storing it twice violated BCNF (`enrolled_id -> user_id`) and allowed a
+  payment to contradict the enrolment it refers to. Removed in Phase 5.
Index: sql/schema_creation.sql
===================================================================
--- sql/schema_creation.sql	(revision 1b20b226a74790f84dc06dc488f4f761b510a3f2)
+++ sql/schema_creation.sql	(revision 20df1a33a74bc8c0aacbab3ab6c1e43df4734d41)
@@ -115,5 +115,4 @@
 CREATE TABLE payment (
     id             INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
-    user_id        INTEGER NOT NULL REFERENCES users (id),
     enrollment_id  INTEGER NOT NULL REFERENCES enrolled_semesters (id),
     amount         INTEGER NOT NULL
