Changes between Version 7 and Version 8 of Normalization


Ignore:
Timestamp:
09/23/25 10:29:59 (5 hours ago)
Author:
223075
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Normalization

    v7 v8  
    151151Со декомпозиција по ентитети и мостови ги елиминиравме транзитивните зависности и постигнавме 3NФ/BCNF
    152152
     153
     154= Комуникација преку домени =
     155
     156== Објаснување ==
     157Комуникацијата преку различни домени е овозможена со заеднички идентификатори (foreign keys) и мост-табели што ги поврзуваат ентитетите низ домените. 
     158Ова се изведува со **JOIN** во SQL прашања, кои овозможуваат податоци од повеќе домени да се комбинираат во еден резултат.
     159
     160== Примери на cross-domain прашања ==
     161
     162=== A) „Кои часови ги резервирал корисникот X, со информации за тренинг и инструктор?“ ===
     163```sql
     164SELECT c.class_id, c.date, c.start_time, c.location,
     165       t.training_name,
     166       i.first_name || ' ' || i.last_name AS instructor
     167FROM "User_Booked_Class" ubc
     168JOIN "Class" c                 ON c.class_id = ubc.class_id
     169LEFT JOIN "Class_Includes_Training" cit ON cit.class_id = c.class_id
     170LEFT JOIN "Training" t         ON t.training_id = cit.training_id
     171LEFT JOIN "Instructor" i       ON i.instructor_id = c.instructor_id
     172WHERE ubc.user_id = $1
     173ORDER BY c.date, c.start_time;
     174=== B) „Кои часови ги отклучуваат пакетите што сум ги купил?“ ===
     175
     176SELECT DISTINCT c.class_id, c.date, c.start_time, c.location, t.training_name
     177FROM "User_Purchased_Package" upp
     178JOIN "Package_Includes_Class" pic ON pic.package_id = upp.package_id
     179JOIN "Class" c                    ON c.class_id = pic.class_id
     180LEFT JOIN "Class_Includes_Training" cit ON cit.class_id = c.class_id
     181LEFT JOIN "Training" t            ON t.training_id = cit.training_id
     182WHERE upp.user_id = $1
     183ORDER BY c.date, c.start_time;
     184
     185
     186=== C) „Кои учесници на настани исто така резервирале клас за тренинг ‘Vinyasa’?“ ===
     187
     188SELECT DISTINCT u.user_id, u.username, e.event_name, e.date
     189FROM "User_Event" ue
     190JOIN "Event" e ON e.event_id = ue.event_id
     191JOIN "User_Booked_Class" ubc ON ubc.user_id = ue.user_id
     192JOIN "Class_Includes_Training" cit ON cit.class_id = ubc.class_id
     193JOIN "Training" t ON t.training_id = cit.training_id
     194JOIN "User" u ON u.user_id = ue.user_id
     195WHERE t.training_name = 'Vinyasa'
     196ORDER BY e.date;
     197
     198
     199=== D) „Корисници кои купиле мерч по купување на било кој пакет“ ===
     200
     201SELECT u.user_id, u.email, COUNT(DISTINCT upm.merch_id) merch_count
     202FROM "User" u
     203JOIN "User_Purchased_Package" upp ON upp.user_id = u.user_id
     204JOIN "User_Purchased_Merch" upm   ON upm.user_id = u.user_id
     205GROUP BY u.user_id, u.email
     206ORDER BY merch_count DESC;
     207
     208
     209== Имплементација во Express ==
     210Во Express backend-от, овие SQL прашања стануваат controller actions кои се извршуваат и враќаат JSON.
     211Надворешните клучеви и индексите овозможуваат овие JOIN-и да бидат брзи и конзистентни.
     212