Changes between Version 11 and Version 12 of ERModel


Ignore:
Timestamp:
09/15/26 01:38:44 (12 days ago)
Author:
236024
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ERModel

    v11 v12  
    1 = Entity-Relationship Model v.11 =
     1= Entity-Relationship Model v.12 =
    22== Diagram ==
    33
    4 [[Image(wiki:ERModel:ERModel_v11.png)]]
     4[[Image(wiki:ERModel:ERModel_v12.png)]]
    55== Data requirements ==
    66
    … …  
    6262   * ms_name: text, required, unique.
    6363
     64==== !MembershipStageRecords ====
     65
     66!MembershipStageRecords stores the history of membership stages for members. It is modeled as an entity because the period attributes identify a historical record, not only a simple relationship between Members and !MembershipStages.
     67
     68 * '''Candidate keys:''' msr_id is chosen as the primary key.
     69 * '''Attributes:'''
     70   * msr_id: numeric identifier, required, unique.
     71   * valid_from: date, required, start date of the membership stage record.
     72   * valid_to: date, optional for the current active stage; when present, must be greater than or equal to valid_from.
     73
    6474==== !OrganizationalFunctions ====
    6575
    … …  
    8292
    8393 * '''Candidate keys:''' inherited of_id from !OrganizationalFunctions.
     94
     95==== !FunctionMandates ====
     96
     97!FunctionMandates stores which full member held which organizational function during a mandate year. It is modeled as an entity because the mandate year belongs to a concrete mandate record.
     98
     99 * '''Candidate keys:''' fm_id is chosen as the primary key.
     100 * '''Attributes:'''
     101   * fm_id: numeric identifier, required, unique.
     102   * mandate_year: numeric, required, year of the organizational function mandate.
    84103
    85104==== !ActivityTypes ====
    … …  
    306325   * volunteer_role: text, required.
    307326
    308 ==== has_stage ====
    309 
    310 has_stage connects Members to !MembershipStages. It stores membership history: which membership stage a member had and during what period. It is needed even though member subtypes exist, because subtypes show the conceptual categories while this relationship records time periods and transitions.
    311 
    312  * '''Candidate keys:''' member student_index + ms_id + valid_from is chosen because a member can potentially enter the same stage more than once over time.
    313  * '''Attributes:'''
    314    * valid_from: date, required, start date of the membership stage.
    315    * valid_to: date, optional for the current active stage; when present, must be greater than or equal to valid_from.
     327==== for_member ====
     328
     329for_member connects !MembershipStageRecords to Members. It represents which member a membership stage record belongs to. Each membership stage record belongs to exactly one member, while one member can have multiple membership stage records over time.
     330
     331==== for_stage ====
     332
     333for_stage connects !MembershipStageRecords to !MembershipStages. It represents which membership stage is recorded in a membership stage record. Each membership stage record refers to exactly one membership stage, while the same membership stage can appear in many membership stage records.
    316334
    317335==== mentorship ====
    … …  
    319337mentorship connects !FullMembers to !YoungMembers. It represents that a young member must have a mentor who is a full member.
    320338
    321 ==== holds_function ====
    322 
    323 holds_function connects !FullMembers to !OrganizationalFunctions. It represents a full member holding an organizational function during a mandate. It is needed because Board membership and coordinator responsibilities are roles held by full members, not separate membership stages.
    324 
    325  * '''Candidate keys:''' full member student_index + of_id + mandate_year is chosen because the same full member can hold different functions and the same function can be held by different full members in different mandates.
    326  * '''Attributes:'''
    327    * mandate_year: numeric, required, year of the organizational function mandate.
     339==== held_by ====
     340
     341held_by connects !FunctionMandates to !FullMembers. It represents which full member held an organizational function during a mandate. Each function mandate belongs to exactly one full member, while one full member can have multiple function mandates over time.
     342
     343==== mandate_of ====
     344
     345mandate_of connects !FunctionMandates to !OrganizationalFunctions. It represents which organizational function is held in a function mandate. Each function mandate refers to exactly one organizational function, while the same organizational function can appear in many function mandates over different mandate years.
    328346
    329347==== cooperation ====
    … …  
    348366||v10||Changed string primary keys to numeric identifiers where needed. Renamed the student key from index to student_index. Added Locations as an entity. Changed !ActivitySessions, !EventEditions, !EventSessionTypes, !EventSessions and !EventFunctions to use numeric identifiers/partial numeric identifiers. Changed !EventSessions, !EventEditions and !ActivitySessions to not be weak entities. Renamed !CoreTeamFunctions to !EventFunctions and renamed the relationship between !FullMembers and !OrganizationalFunctions from is to holds_function. Changed if some relationships are mandatory or not based on logic.||
    349367||v11||Added !EventFunctionTypes so reusable event function names are not repeated inside !EventFunctions. Added holds_event_function to separate actual event function holders from applications. Added required_attendance between Members and !ActivitySessions so mandatory attendance can be represented separately from ordinary participation and absence announcements.||
     368||v12|| Replaced `has_stage` with !MembershipStageRecords and replaced `holds_function` with !FunctionMandates. Added `msr_id` and `fm_id` as numeric identifiers so relationship attributes are not part of primary keys. ||
    350369
    351370== AI Use ==