Changes between Version 4 and Version 5 of Normalization


Ignore:
Timestamp:
09/30/25 13:11:08 (15 hours ago)
Author:
221028
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Normalization

    v4 v5  
    33
    44**Мега-релација R**
     5
     6Ја дефинираме една „де-нормализирана“ мега-релација што ги содржи сите атрибути што реално живеат во повеќе релации:
    57
    68R = {
     
    2022 }
    2123
     24Идејата е од оваа „една голема“ R, преку функционални зависности (ФЗ) да стигнеме до нормализирана шема (како што реално ја имаш во базата).
     25
    2226**Функциски зависности**
    2327
     
    79832) Кандидат-клучеви
    8084
    81 User {user_id} (алтернативен {email}); Elements {element_id} (алтернативен {symbol}); LabEquipment {equipment_id} (алтернативен {equipment_name}); Reaction {reaction_id} (алтернативно тројката (e1,e2,conditions)); Experiment {experiment_id}; лог табели со композитни PK: {user_id,experiment_id}, {user_id,element_id}, {user_id,equipment_id}, {experiment_id,equipment_id}.
     85User {user_id} (алтернативен {email});
     86Elements {element_id} (алтернативен {symbol});
     87LabEquipment {equipment_id} (алтернативен {equipment_name});
     88Reaction {reaction_id} (алтернативно тројката (e1,e2,conditions));
     89Experiment {experiment_id};
     90лог табели со композитни PK: {user_id,experiment_id}, {user_id,element_id}, {user_id,equipment_id}, {experiment_id,equipment_id}.
    8291
    83923) 1NF → 2NF → 3NF/BCNF
     
    110119|| userviewslabequipment       || (user_id, equipment_id)          || корисник / опрема                        || 3NF / BCNF                        ||
    111120
     121**Главен клуч за целата мега-релација R**
     122
     123Во мега-релација се измешани повеќе домени (корисници, елементи, опрема, реакции, експерименти и логови). За да има една композитна множина што „ги покрива“ сите атрибути во R, земаме детерминанти кои ги активираат сите делови од R:
     124
     125GK = { user_id, reaction_id, experiment_id, element_id, equipment_id }
     126
     127
     128
     129
     130Зошто ова работи:
     131
     132Од reaction_id добиваме: element1_id, element2_id, product, conditions, r_teacher_id.
     133
     134Од experiment_id добиваме: reaction_fk (→ ист како reaction_id на реакцијата), result, safety_warning, time_stamp, e_teacher_id.
     135
     136Од user_id + experiment_id одредуваме participation_timestamp (UPE).
     137
     138Од user_id + element_id одредуваме viewed_at_el (UVE).
     139
     140Од user_id + equipment_id одредуваме viewed_at_eq (UVL).
     141
     142Од experiment_id + equipment_id ја фиксираме N:M табелата ExperimentLabEquipment.
     143
     144Од element_id ги добиваме сите својства на елементот (+ кој наставник го креирал).
     145
     146Од equipment_id ги добиваме сите својства на опремата (+ кој наставник ја внел).
     147
     148Од user_id ги добиваме податоците за корисникот (име/улога/мејл/лозинка-хеш).
     149
     150Со ова, GK⁺ го опфаќа целиот атрибутски простор на R. Oд оваа множина на клучеви можеме логички да стигнеме до сите атрибути во R.
     151
     152
     153
     154**Зошто овие функционалности постојат и како се штитат со модел/ограничувања**
     155
     1561. **Најава/улоги** – безбедност и права
     157
     158Зошто: наставник ≠ студент (внес vs. учество).
     159
     160Како: User.role, middleware require_login(role), email UNIQUE, хеш-пасворд.
     161
     1622. **Студент → наставник** – менторирање и филтрирање извештаи
     163
     164Зошто: наставник следи „свои“ студенти.
     165
     166Како: Student(student_id, teacher_id); извештаи филтрираат по teacher_id.
     167
     1683. **Eлементи/опрема** – единствена вистина и безбедност
     169
     170Зошто: реакции и експерименти се градат врз точни податоци; безбедносни белешки.
     171
     172Како: symbol UNIQUE, equipment_name UNIQUE, физички CHECK-ови.
     173
     1744. **Реакции – научна конзистентност**
     175
     176Зошто: за исти елементи и исти услови → ист производ.
     177
     178Како: UNIQUE(element1_id,element2_id,COALESCE(conditions,'')), CHECK(element1_id<>element2_id).
     179
     1805. **Експерименти – педагошка трага и репродуцибилност**
     181
     182Зошто: резултат, време, безбедност; логика за „последен експеримент по реакција“.
     183
     184Како: FK кон Reaction, тригер за safety_warning, индекс (reaction_id, time_stamp DESC).
     185
     1866. **Учество/Прегледи (логови)** – оцена, активност, анализа
     187
     188Зошто: кој учествувал, што читале студентите (безбедносна документација).
     189
     190Како: композитни PK во лог-табелите; индекси по user_id и време.
     191
     1927. **Опрема по експеримент (N:M)** – точна документација на ресурси
     193
     194Зошто: репродуцибилност и планирање ресурси.
     195
     196Како: ExperimentLabEquipment со композитен PK; batch ON CONFLICT DO NOTHING.
     197
     1988. **Stored function / транзакција** – атомичност
     199
     200Зошто: Reaction+Experiment+(N:M) да се креираат заедно или ништо.
     201
     202Како: create_reaction_and_experiment_fn(...) + Python fallback транзакција.