Changeset 1a9c843


Ignore:
Timestamp:
09/23/26 13:29:06 (2 hours ago)
Author:
Stefan-Saveski <stefansaveski19@…>
Branches:
master
Children:
e7bafc0
Parents:
a12988e (diff), f7c8acf (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge remote-tracking branch 'origin/phase5-normalization'

Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • iknow-api/Data/AppDbContext.cs

    ra12988e r1a9c843  
    290290                e.HasKey(p => p.Id);
    291291                e.Property(p => p.Id).HasColumnName("id");
    292                 e.Property(p => p.UserId).HasColumnName("user_id");
    293292                e.Property(p => p.EnrollmentInfoId).HasColumnName("enrollment_id");
    294293                e.Property(p => p.Amount).HasColumnName("amount");
    295294
    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).
    301297                e.HasOne(p => p.EnrolledSemesters)
    302298                 .WithMany(es => es.Users)
  • iknow-api/Models/Payment.cs

    ra12988e r1a9c843  
    1 using System.ComponentModel.DataAnnotations.Schema;
    2 
    31namespace iknow_api.Models
    42{
     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>
    58    public class Payment
    69    {
    710        public int Id { get; set; }
    811
    9         public int UserId { get; set; }
    10         public User? User { get; set; }
    1112        public int EnrollmentInfoId { get; set; }
    1213        public int Amount { get; set; }
    1314        public EnrolledSemesters? EnrolledSemesters { get; set; }
    14 
    1515    }
    1616}
  • iknow-api/Models/User.cs

    ra12988e r1a9c843  
    2828        public ICollection<UserDocuments>? Documents { get; set; }
    2929
    30         // Named for the relationship it carries: Users 1 --pays-- N Payment.
    31         public ICollection<Payment>? Payments { get; set; }
    32 
    3330        // Users 1 --submits-- N EnrolledSemesters
    3431        public ICollection<EnrolledSemesters>? Enrolments { get; set; }
  • sql/data_load.sql

    ra12988e r1a9c843  
    115115(3, 1, 'tok_old789_stefan', '2026-01-01 00:00:00', FALSE);
    116116
    117 INSERT INTO payment (id, user_id, enrollment_id, amount) VALUES
    118 (1, 1, 1, 200),
    119 (2, 1, 2, 200),
    120 (3, 2, 3, 400),
    121 (4, 3, 4, 200);
     117INSERT INTO payment (id, enrollment_id, amount) VALUES
     118(1, 1, 200),
     119(2, 2, 200),
     120(3, 3, 400),
     121(4, 4, 200);
    122122
    123123INSERT INTO major_subjects (major_id, subject_id, mandatory_semester) VALUES
  • sql/iknow.dbml

    ra12988e r1a9c843  
    150150Table project.payment {
    151151  id integer [pk, increment]
    152   user_id integer [not null]
    153152  enrollment_id integer [not null]
    154153  amount integer [not null]
     
    188187Ref: project.contact.user_id - project.users.id                      // has_contact (1:1)
    189188Ref: project.token.user_id > project.users.id                        // has_token
    190 Ref: project.payment.user_id > project.users.id                      // pays
    191189Ref: project.payment.enrollment_id > project.enrolled_semesters.id   // for_enrollment
    192190Ref: project.enrolled_semesters.user_id > project.users.id           // submits
  • sql/schema.md

    ra12988e r1a9c843  
    111111    payment {
    112112        integer id PK
    113         integer user_id FK
    114113        integer enrollment_id FK
    115114        integer amount
     
    136135    users               ||--o| contact            : has_contact
    137136    users               ||--o{ token              : has_token
    138     users               ||--o{ payment            : pays
    139137    users               ||--o{ enrolled_semesters : submits
    140138    users               ||--o{ user_documents     : owns
     
    184182  they differ.
    185183- `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

    ra12988e r1a9c843  
    115115CREATE TABLE payment (
    116116    id             INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
    117     user_id        INTEGER NOT NULL REFERENCES users (id),
    118117    enrollment_id  INTEGER NOT NULL REFERENCES enrolled_semesters (id),
    119118    amount         INTEGER NOT NULL
Note: See TracChangeset for help on using the changeset viewer.