Changeset 20df1a3
- Timestamp:
- 09/16/26 14:48:55 (7 days ago)
- Branches:
- master
- Children:
- f7c8acf
- Parents:
- 1b20b22
- Files:
-
- 7 edited
-
iknow-api/Data/AppDbContext.cs (modified) (1 diff)
-
iknow-api/Models/Payment.cs (modified) (1 diff)
-
iknow-api/Models/User.cs (modified) (1 diff)
-
sql/data_load.sql (modified) (1 diff)
-
sql/iknow.dbml (modified) (2 diffs)
-
sql/schema.md (modified) (3 diffs)
-
sql/schema_creation.sql (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
iknow-api/Data/AppDbContext.cs
r1b20b22 r20df1a3 290 290 e.HasKey(p => p.Id); 291 291 e.Property(p => p.Id).HasColumnName("id"); 292 e.Property(p => p.UserId).HasColumnName("user_id");293 292 e.Property(p => p.EnrollmentInfoId).HasColumnName("enrollment_id"); 294 293 e.Property(p => p.Amount).HasColumnName("amount"); 295 294 296 e.HasOne(p => p.User) 297 .WithMany(u => u.Payments) 298 .HasForeignKey(p => p.UserId) 299 .OnDelete(DeleteBehavior.Cascade); 300 295 // No user_id: the student comes from the enrolment. Removing it 296 // was the BCNF fix from Phase 5 (enrolled_id -> user_id). 301 297 e.HasOne(p => p.EnrolledSemesters) 302 298 .WithMany(es => es.Users) -
iknow-api/Models/Payment.cs
r1b20b22 r20df1a3 1 using System.ComponentModel.DataAnnotations.Schema;2 3 1 namespace iknow_api.Models 4 2 { 3 /// <summary> 4 /// The student is reached through the enrolment: enrolled_id -> user_id. 5 /// A user_id here would be redundant and could contradict the enrolment, 6 /// which is the BCNF violation found during normalization (Phase 5). 7 /// </summary> 5 8 public class Payment 6 9 { 7 10 public int Id { get; set; } 8 11 9 public int UserId { get; set; }10 public User? User { get; set; }11 12 public int EnrollmentInfoId { get; set; } 12 13 public int Amount { get; set; } 13 14 public EnrolledSemesters? EnrolledSemesters { get; set; } 14 15 15 } 16 16 } -
iknow-api/Models/User.cs
r1b20b22 r20df1a3 28 28 public ICollection<UserDocuments>? Documents { get; set; } 29 29 30 // Named for the relationship it carries: Users 1 --pays-- N Payment.31 public ICollection<Payment>? Payments { get; set; }32 33 30 // Users 1 --submits-- N EnrolledSemesters 34 31 public ICollection<EnrolledSemesters>? Enrolments { get; set; } -
sql/data_load.sql
r1b20b22 r20df1a3 115 115 (3, 1, 'tok_old789_stefan', '2026-01-01 00:00:00', FALSE); 116 116 117 INSERT INTO payment (id, user_id,enrollment_id, amount) VALUES118 (1, 1, 1,200),119 (2, 1,2, 200),120 (3, 2,3, 400),121 (4, 3,4, 200);117 INSERT INTO payment (id, enrollment_id, amount) VALUES 118 (1, 1, 200), 119 (2, 2, 200), 120 (3, 3, 400), 121 (4, 4, 200); 122 122 123 123 INSERT INTO major_subjects (major_id, subject_id, mandatory_semester) VALUES -
sql/iknow.dbml
r1b20b22 r20df1a3 150 150 Table project.payment { 151 151 id integer [pk, increment] 152 user_id integer [not null]153 152 enrollment_id integer [not null] 154 153 amount integer [not null] … … 188 187 Ref: project.contact.user_id - project.users.id // has_contact (1:1) 189 188 Ref: project.token.user_id > project.users.id // has_token 190 Ref: project.payment.user_id > project.users.id // pays191 189 Ref: project.payment.enrollment_id > project.enrolled_semesters.id // for_enrollment 192 190 Ref: project.enrolled_semesters.user_id > project.users.id // submits -
sql/schema.md
r1b20b22 r20df1a3 111 111 payment { 112 112 integer id PK 113 integer user_id FK114 113 integer enrollment_id FK 115 114 integer amount … … 136 135 users ||--o| contact : has_contact 137 136 users ||--o{ token : has_token 138 users ||--o{ payment : pays139 137 users ||--o{ enrolled_semesters : submits 140 138 users ||--o{ user_documents : owns … … 184 182 they differ. 185 183 - `professour_subjects` keeps the spelling used by the table in `schema_creation.sql`. 184 - `payment` has no `user_id`: the student is reached through `enrollment_id`. 185 Storing it twice violated BCNF (`enrolled_id -> user_id`) and allowed a 186 payment to contradict the enrolment it refers to. Removed in Phase 5. -
sql/schema_creation.sql
r1b20b22 r20df1a3 115 115 CREATE TABLE payment ( 116 116 id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, 117 user_id INTEGER NOT NULL REFERENCES users (id),118 117 enrollment_id INTEGER NOT NULL REFERENCES enrolled_semesters (id), 119 118 amount INTEGER NOT NULL
Note:
See TracChangeset
for help on using the changeset viewer.
