Changes between Version 1 and Version 2 of Normalization


Ignore:
Timestamp:
08/31/25 20:15:59 (40 hours ago)
Author:
222004
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Normalization

    v1 v2  
    33
    44----
    5 Целосна и детална анализа на сите ентитети и релации во базата SynergyMed.
     5Целосна и детална анализа на сите ентитети и релации во базата SynergyMed.\\
     6
    67Целта е да се докаже, со користење на функционални зависности, покривачи и суперклучеви, дека секоја релација ја задоволува Boyce–Codd Normal Form (BCNF).
    78
    89== Идентификување на суперклучеви и нивните покривачи
    910
    10 **Users**
    11 Суперклуч: id
    12 id⁺ = {id, first_name, last_name, username, hashed_password, e_mail, gender, date_created, date_of_birth}
    13 Суперклуч: username
    14 username⁺ = {username, id, first_name, last_name, hashed_password, e_mail, gender, date_created, date_of_birth}
    15 Суперклуч: e_mail
    16 e_mail⁺ = {e_mail, id, first_name, last_name, username, hashed_password, gender, date_created, date_of_birth}
    17 
    18 **Client**
    19 Суперклуч: user_id
    20 user_id⁺ = {user_id, is_verified}
    21 
    22 **Pharmacist**
    23 Суперклуч: user_id
    24 user_id⁺ = {user_id}
    25 
    26 **Admin**
    27 Суперклуч: user_id
    28 user_id⁺ = {user_id}
    29 
    30 **Company**
    31 Суперклуч: id
    32 id⁺ = {id, company_name, description, registration_number}
    33 Суперклуч: registration_number
    34 registration_number⁺ = {registration_number, id, company_name, description}
    35 
    36 **Pharmacy**
    37 Суперклуч: company_id
    38 company_id⁺ = {company_id}
    39 
    40 **Distributor**
    41 Суперклуч: company_id
    42 company_id⁺ = {company_id}
    43 
    44 **Manufacturer**
    45 Суперклуч: company_id
    46 company_id⁺ = {company_id}
    47 
    48 **DeliveryCompany**
    49 Суперклуч: company_id
    50 company_id⁺ = {company_id}
    51 
    52 **Facility**
    53 Суперклуч: id
    54 id⁺ = {id, company_id, facility_name, code}
    55 Суперклуч: code
    56 code⁺ = {code, id, company_id, facility_name}
    57 
    58 **Inventory**
    59 Суперклуч: id
    60 id⁺ = {id, facility_id}
    61 Суперклуч: facility_id
    62 facility_id⁺ = {facility_id, id}
    63 
    64 **Medicine**
    65 Суперклуч: id
    66 id⁺ = {id, medicine_name, active_ingredient}
    67 
    68 **BrandedMedicine**
    69 Суперклуч: id
    70 id⁺ = {id, manufacturer_id, name, price, description, dosage_form, strength, origin_country}
    71 
    72 **BrandedMedicineImage**
    73 Суперклуч: id
    74 id⁺ = {id, branded_medicine_id, image}
    75 
    76 **ContactInformation**
    77 Суперклуч: id
    78 id⁺ = {id, phone, address, user_id, facility_id}
    79 
    80 **ClubCard**
    81 Суперклуч: id
    82 id⁺ = {id, user_id, club_program, points}
    83 
    84 **PaymentMethod**
    85 Суперклуч: id
    86 id⁺ = {id, method_name}
    87 
    88 **Payment**
    89 Суперклуч: id
    90 id⁺ = {id, client_id, payment_method_id, payment_date, amount, status}
    91 
    92 **ClientOrder**
    93 Суперклуч: id
    94 id⁺ = {id, client_id, delivery_company_id, payment_id, order_date, expected_arrival_date, status, total_price}
    95 Суперклуч: payment_id
    96 payment_id⁺ = {payment_id, id, client_id, delivery_company_id, order_date, expected_arrival_date, status, total_price}
    97 
    98 **ShoppingCart**
    99 Суперклуч: id
    100 id⁺ = {id, client_id}
    101 
    102 **SupplyOrder**
    103 Суперклуч: id
    104 id⁺ = {id, distributor_id, pharmacy_id, order_date, expected_arrival_date, status}
    105 
    106 **HealthProfile**
    107 Суперклуч: id
    108 id⁺ = {id, client_id, blood_type}
    109 
    110 **SensitiveClientData**
    111 Суперклуч: id
    112 id⁺ = {id, client_id, pharmacist_id, embg, portrait_photo, verification_status}
    113 
    114 **Prescription**
    115 Суперклуч: id
    116 id⁺ = {id, client_id, medicine_id, issued_by, issued_at, valid_to, embg}
    117 
    118 **ClientOrder_BrandedMedicine**
    119 Суперклуч: {order_id, branded_medicine_id}
    120 {order_id, branded_medicine_id}⁺ = {order_id, branded_medicine_id, quantity}
    121 
    122 **ShoppingCart_BrandedMedicine**
    123 Суперклуч: {shopping_cart_id, branded_medicine_id}
    124 {shopping_cart_id, branded_medicine_id}⁺ = {shopping_cart_id, branded_medicine_id, quantity}
    125 
    126 **SupplyOrder_BrandedMedicine**
    127 Суперклуч: {supply_order_id, branded_medicine_id}
    128 {supply_order_id, branded_medicine_id}⁺ = {supply_order_id, branded_medicine_id, quantity}
    129 
    130 **Inventory_BrandedMedicine**
    131 Суперклуч: {inventory_id, branded_medicine_id}
    132 {inventory_id, branded_medicine_id}⁺ = {inventory_id, branded_medicine_id, quantity, last_changed}
    133 
    134 **Pharmacy_Catalog**
    135 Суперклуч: {pharmacy_id, branded_medicine_id}
    136 {pharmacy_id, branded_medicine_id}⁺ = {pharmacy_id, branded_medicine_id}
    137 
    138 **Distributor_BrandedMedicine**
    139 Суперклуч: {distributor_id, branded_medicine_id}
    140 {distributor_id, branded_medicine_id}⁺ = {distributor_id, branded_medicine_id}
    141 
    142 **Branded_Medicine_InstanceOf_Medicine**
    143 Суперклуч: {branded_medicine_id, medicine_id}
    144 {branded_medicine_id, medicine_id}⁺ = {branded_medicine_id, medicine_id}
    145 
    146 **AllergicReaction_HealthProfile_Medicine**
    147 Суперклуч: {health_profile_id, medicine_id}
    148 {health_profile_id, medicine_id}⁺ = {health_profile_id, medicine_id, date_diagnosed, description, severity}
    149 
    150 **MedicineInteraction**
    151 Суперклуч: {medicine_id_1, medicine_id_2}
    152 {medicine_id_1, medicine_id_2}⁺ = {medicine_id_1, medicine_id_2, type, description, severity}
     11**Users**\\
     12Суперклуч: id\\
     13id⁺ = {id, first_name, last_name, username, hashed_password, e_mail, gender, date_created, date_of_birth}\\
     14\\
     15Суперклуч: username\\
     16username⁺ = {username, id, first_name, last_name, hashed_password, e_mail, gender, date_created, date_of_birth}\\
     17\\
     18Суперклуч: e_mail\\
     19e_mail⁺ = {e_mail, id, first_name, last_name, username, hashed_password, gender, date_created, date_of_birth}\\
     20\\
     21**Client**\\
     22Суперклуч: user_id\\
     23user_id⁺ = {user_id, is_verified}\\
     24\\
     25**Pharmacist**\\
     26Суперклуч: user_id\\
     27user_id⁺ = {user_id}\\
     28\\
     29**Admin**\\
     30Суперклуч: user_id\\
     31user_id⁺ = {user_id}\\
     32\\
     33**Company**\\
     34Суперклуч: id\\
     35id⁺ = {id, company_name, description, registration_number}\\
     36\\
     37Суперклуч: registration_number\\
     38registration_number⁺ = {registration_number, id, company_name, description}\\
     39\\
     40**Pharmacy**\\
     41Суперклуч: company_id\\
     42company_id⁺ = {company_id}\\
     43\\
     44**Distributor**\\
     45Суперклуч: company_id\\
     46company_id⁺ = {company_id}\\
     47\\
     48**Manufacturer**\\
     49Суперклуч: company_id\\
     50company_id⁺ = {company_id}\\
     51\\
     52**DeliveryCompany**\\
     53Суперклуч: company_id\\
     54company_id⁺ = {company_id}\\
     55\\
     56**Facility**\\
     57Суперклуч: id\\
     58id⁺ = {id, company_id, facility_name, code}\\
     59\\
     60Суперклуч: code\\
     61code⁺ = {code, id, company_id, facility_name}\\
     62\\
     63**Inventory**\\
     64Суперклуч: id\\
     65id⁺ = {id, facility_id}\\
     66\\
     67Суперклуч: facility_id\\
     68facility_id⁺ = {facility_id, id}\\
     69\\
     70**Medicine**\\
     71Суперклуч: id\\
     72id⁺ = {id, medicine_name, active_ingredient}\\
     73\\
     74**BrandedMedicine**\\
     75Суперклуч: id\\
     76id⁺ = {id, manufacturer_id, name, price, description, dosage_form, strength, origin_country}\\
     77\\
     78**BrandedMedicineImage**\\
     79Суперклуч: id\\
     80id⁺ = {id, branded_medicine_id, image}\\
     81\\
     82**ContactInformation**\\
     83Суперклуч: id\\
     84id⁺ = {id, phone, address, user_id, facility_id}\\
     85\\
     86**ClubCard**\\
     87Суперклуч: id\\
     88id⁺ = {id, user_id, club_program, points}\\
     89\\
     90**PaymentMethod**\\
     91Суперклуч: id\\
     92id⁺ = {id, method_name}\\
     93\\
     94**Payment**\\
     95Суперклуч: id\\
     96id⁺ = {id, client_id, payment_method_id, payment_date, amount, status}\\
     97\\
     98**ClientOrder**\\
     99Суперклуч: id\\
     100id⁺ = {id, client_id, delivery_company_id, payment_id, order_date, expected_arrival_date, status, total_price}\\
     101\\
     102Суперклуч: payment_id\\
     103payment_id⁺ = {payment_id, id, client_id, delivery_company_id, order_date, expected_arrival_date, status, total_price}\\
     104\\
     105**ShoppingCart**\\
     106Суперклуч: id\\
     107id⁺ = {id, client_id}\\
     108\\
     109**SupplyOrder**\\
     110Суперклуч: id\\
     111id⁺ = {id, distributor_id, pharmacy_id, order_date, expected_arrival_date, status}\\
     112\\
     113**HealthProfile**\\
     114Суперклуч: id\\
     115id⁺ = {id, client_id, blood_type}\\
     116\\
     117**SensitiveClientData**\\
     118Суперклуч: id\\
     119id⁺ = {id, client_id, pharmacist_id, embg, portrait_photo, verification_status}\\
     120\\
     121**Prescription**\\
     122Суперклуч: id\\
     123id⁺ = {id, client_id, medicine_id, issued_by, issued_at, valid_to, embg}\\
     124\\
     125**ClientOrder_BrandedMedicine**\\
     126Суперклуч: {order_id, branded_medicine_id}\\
     127{order_id, branded_medicine_id}⁺ = {order_id, branded_medicine_id, quantity}\\
     128\\
     129**ShoppingCart_BrandedMedicine**\\
     130Суперклуч: {shopping_cart_id, branded_medicine_id}\\
     131{shopping_cart_id, branded_medicine_id}⁺ = {shopping_cart_id, branded_medicine_id, quantity}\\
     132\\
     133**SupplyOrder_BrandedMedicine**\\
     134Суперклуч: {supply_order_id, branded_medicine_id}\\
     135{supply_order_id, branded_medicine_id}⁺ = {supply_order_id, branded_medicine_id, quantity}\\
     136\\
     137**Inventory_BrandedMedicine**\\
     138Суперклуч: {inventory_id, branded_medicine_id}\\
     139{inventory_id, branded_medicine_id}⁺ = {inventory_id, branded_medicine_id, quantity, last_changed}\\
     140\\
     141**Pharmacy_Catalog**\\
     142Суперклуч: {pharmacy_id, branded_medicine_id}\\
     143{pharmacy_id, branded_medicine_id}⁺ = {pharmacy_id, branded_medicine_id}\\
     144\\
     145**Distributor_BrandedMedicine**\\
     146Суперклуч: {distributor_id, branded_medicine_id}\\
     147{distributor_id, branded_medicine_id}⁺ = {distributor_id, branded_medicine_id}\\
     148\\
     149**Branded_Medicine_InstanceOf_Medicine**\\
     150Суперклуч: {branded_medicine_id, medicine_id}\\
     151{branded_medicine_id, medicine_id}⁺ = {branded_medicine_id, medicine_id}\\
     152\\
     153**AllergicReaction_HealthProfile_Medicine**\\
     154Суперклуч: {health_profile_id, medicine_id}\\
     155{health_profile_id, medicine_id}⁺ = {health_profile_id, medicine_id, date_diagnosed, description, severity}\\
     156\\
     157**MedicineInteraction**\\
     158Суперклуч: {medicine_id_1, medicine_id_2}\\
     159{medicine_id_1, medicine_id_2}⁺ = {medicine_id_1, medicine_id_2, type, description, severity}\\
    153160
    154161----
     
    156163== Проверка на BCNF
    157164
    158 **Users**
    159 Табелата Users ги чува сите основни податоци за корисниците. Примарен клуч е id, но истовремено username и e_mail се декларирани како уникатни и затоа претставуваат алтернативни клучеви. Функционалните зависности се: id → {first_name, last_name, username, hashed_password, e_mail, gender, date_created, date_of_birth}, како и username → id и e_mail → id. Бидејќи секоја зависност има клуч (или кандидат клуч) на левата страна, секој атрибут е целосно функционално зависен од клучот.
    160 **Заклучок: Users е во BCNF.**
    161 
    162 **Client, Pharmacist, Admins**
    163 Овие три релации се специјализации на Users и го користат user_id како примарен клуч. Во Client, атрибутот is_verified зависи единствено од user_id. Кај Pharmacist и Admins нема дополнителни атрибути освен врската со Users. Затоа, за сите три релации, левата страна на секоја функционална зависност е суперклуч.
    164 **Заклучок: сите три релации се во BCNF.**
    165 
    166 **Company**
    167 Релацијата Company има примарен клуч id, но и registration_number е уникатен и претставува алтернативен клуч. Зависностите се: id → {company_name, description, registration_number} и registration_number → id. И во двата случаи левата страна е клуч, што гарантира исполнување на BCNF.
    168 **Заклучок: Company е во BCNF.**
    169 
    170 **Pharmacy, Distributor, Manufacturer, DeliveryCompany**
    171 Овие четири релации се специјализации на Company и го користат company_id како примарен клуч. Немаат сопствени не-клучни атрибути, па единствената зависност е company_id → {}. Како што секогаш левата страна е клуч, **сите се во BCNF.**
    172 
    173 **Facility**
    174 Табелата Facility има два клуча: id и code (кој е уникатен). Зависностите се id → {company_id, facility_name, code} и code → id. Во двата случаи, левата страна е суперклуч, со што сите атрибути зависат целосно од клучевите.
    175 **Заклучок: Facility е во BCNF.**
    176 
    177 **Inventory**
    178 Релацијата Inventory има примарен клуч id и дополнително facility_id е уникатен, што создава уште еден алтернативен клуч. Зависностите се id → facility_id и facility_id → id. Ова е двонасочна зависност помеѓу два клуча. **Затоа релацијата е во BCNF.**
    179 
    180 **Medicine**
    181 Релацијата Medicine има едноставен примарен клуч id. Функционалната зависност е id → {medicine_name, active_ingredient}. Нема дополнителни уникатни ограничувања, па сите атрибути зависат исклучиво од клучот.
    182 **Заклучок: Medicine е во BCNF.**
    183 
    184 **BrandedMedicine**
    185 Оваа релација го користи id како примарен клуч и содржи повеќе атрибути (manufacturer_id, name, price, description, dosage_form, strength, origin_country). Функционалната зависност е id → {сите останати атрибути}. Производителот може да има повеќе лекови, па manufacturer_id сам по себе не е клуч. Левата страна (id) е клуч, така што **BrandedMedicine е во BCNF.**
    186 
    187 **BrandedMedicineImage**
    188 Тука примарен клуч е id. Зависноста е id → {branded_medicine_id, image}. Бидејќи секој атрибут зависи од примарниот клуч, **релацијата е во BCNF.**
    189 
    190 **ContactInformation**
    191 Примарен клуч е id. Дополнителното ограничување бара секоја контакт информација да се однесува на точно еден објект или точно еден корисник. Зависностите се id → {phone, address, user_id, facility_id}. Сите зависности се со клуч на левата страна, па **ContactInformation е во BCNF.**
    192 
    193 **ClubCard**
    194 Оваа релација има примарен клуч id. Сите останати атрибути (user_id, club_program, points) зависат единствено од овој клуч. Нема транзитивни зависности. Заклучок: **ClubCard е во BCNF.**
    195 
    196 **PaymentMethod**
    197 Со примарен клуч id, единствената зависност е id → method_name. **Затоа релацијата е во BCNF.**
    198 
    199 **Payment**
    200 Релацијата Payment има примарен клуч id. Атрибутите client_id, payment_method_id, payment_date, amount, status зависат директно од id. Нема други уникатни ограничувања што би создале транзитивни зависности.
    201 **Заклучок: Payment е во BCNF.**
    202 
    203 **ClientOrder**
    204 Оваа релација има два кандидат клуча: id (PK) и payment_id (unique). Зависностите се id → {client_id, delivery_company_id, payment_id, order_date, expected_arrival_date, status, total_price} и payment_id → id. Бидејќи во двата случаи левата страна е клуч, **релацијата е во BCNF.**
    205 
    206 **ShoppingCart**
    207 Примарен клуч е id. Единствената зависност е id → {client_id}. Бидејќи левата страна е клуч, **релацијата е во BCNF.**
    208 
    209 **SupplyOrder**
    210 Примарен клуч е id. Сите останати атрибути (distributor_id, pharmacy_id, order_date, expected_arrival_date, status) зависат од овој клуч.
    211 **Заклучок: SupplyOrder е во BCNF.**
    212 
    213 **HealthProfile**
    214 Со примарен клуч id, останатите атрибути (client_id, blood_type) зависат исклучиво од клучот.
    215 **Заклучок: HealthProfile е во BCNF.**
    216 
    217 **SensitiveClientData**
    218 Примарен клуч е id. Сите останати атрибути (client_id, pharmacist_id, embg, portrait_photo, verification_status) зависат од него.
    219 **Затоа релацијата е во BCNF.**
    220 
    221 **Prescription**
    222 Примарен клуч е id. Функционалната зависност е id → {client_id, medicine_id, issued_by, issued_at, valid_to, embg}. Иако embg може да се повторува за повеќе рецепти, примарниот клуч секогаш е id, што гарантира BCNF.
    223 **Заклучок: Prescription е во BCNF.**
    224 
    225 **ClientOrder_BrandedMedicine**
    226 Оваа релација ги поврзува клиентските нарачки со брендираните лекови и содржи и атрибут quantity. Примарен клуч е составен: {order_id, branded_medicine_id}. Функционалната зависност е {order_id, branded_medicine_id} → {quantity}. Покривачот (order_id, branded_medicine_id)⁺ = {order_id, branded_medicine_id, quantity}, што ги содржи сите атрибути на релацијата.
    227 **Затоа ClientOrder_BrandedMedicine е во BCNF.**
    228 
    229 **ShoppingCart_BrandedMedicine**
    230 Оваа релација ги поврзува кошничките со брендираните лекови и содржи количество. Примарен клуч е {shopping_cart_id, branded_medicine_id}. Функционалната зависност е {shopping_cart_id, branded_medicine_id} → {quantity}. Покривачот на составниот клуч ги опфаќа сите атрибути, па нема парцијални ниту транзитивни зависности. **Заклучок: ShoppingCart_BrandedMedicine е во BCNF.**
    231 
    232 **SupplyOrder_BrandedMedicine**
    233 Оваа релација поврзува нарачки за снабдување со брендирани лекови и содржи quantity. Примарен клуч е {supply_order_id, branded_medicine_id}. Зависност: {supply_order_id, branded_medicine_id} → {quantity}. Покривачот на составниот клуч ги содржи сите атрибути.
    234 **Заклучок: SupplyOrder_BrandedMedicine е во BCNF.**
    235 
    236 **Inventory_BrandedMedicine**
    237 Оваа релација поврзува магацини со брендирани лекови и содржи {quantity, last_changed}. Примарен клуч е {inventory_id, branded_medicine_id}. Зависностите се {inventory_id, branded_medicine_id} → {quantity, last_changed}. Покривачот на составниот клуч ги содржи сите атрибути, што значи дека **е во BCNF.**
    238 
    239 **Pharmacy_Catalog**
    240 Релацијата ги поврзува аптеките со брендирани лекови. Примарен клуч е {pharmacy_id, branded_medicine_id}. Единствената зависност е составниот клуч → {} (нема дополнителни атрибути). Покривачот на клучот ги содржи сите атрибути, па **Pharmacy_Catalog е во BCNF.**
    241 
    242 **Distributor_BrandedMedicine**
    243 Оваа релација поврзува дистрибутери со брендирани лекови. Примарен клуч е {distributor_id, branded_medicine_id}. Нема дополнителни атрибути, па функционалната зависност е {distributor_id, branded_medicine_id} → {}. Бидејќи клучот ги покрива сите атрибути, **Distributor_BrandedMedicine е во BCNF.**
    244 
    245 **Branded_Medicine_InstanceOf_Medicine**
    246 Оваа релација ја врзува врската помеѓу брендирани и генерички лекови. Примарен клуч е {branded_medicine_id, medicine_id}. Зависноста е составниот клуч → {}. Покривачот на клучот ги содржи сите атрибути.
    247 **Заклучок: Branded_Medicine_InstanceOf_Medicine е во BCNF.**
    248 
    249 **AllergicReaction_HealthProfile_Medicine**
    250 Оваа релација ги поврзува здравствените профили со лекови што предизвикуваат алергиски реакции, и содржи дополнителни атрибути {date_diagnosed, description, severity}. Примарен клуч е {health_profile_id, medicine_id}. Функционалната зависност е {health_profile_id, medicine_id} → {date_diagnosed, description, severity}. Покривачот на составниот клуч ги содржи сите атрибути. **Затоа AllergicReaction_HealthProfile_Medicine е во BCNF.**
    251 
    252 **MedicineInteraction**
    253 Оваа релација ги опишува интеракциите помеѓу парови лекови. Примарен клуч е {medicine_id_1, medicine_id_2}. Дополнителните атрибути се {type, description, severity}. Функционалната зависност е {medicine_id_1, medicine_id_2} → {type, description, severity}. Со оглед дека составниот клуч ги покрива сите атрибути, **MedicineInteraction е во BCNF.**
    254 
     165**Users**\\
     166Табелата Users ги чува сите основни податоци за корисниците. Примарен клуч е id, но истовремено username и e_mail се декларирани како уникатни и затоа претставуваат алтернативни клучеви. Функционалните зависности се: id → {first_name, last_name, username, hashed_password, e_mail, gender, date_created, date_of_birth}, како и username → id и e_mail → id. Бидејќи секоја зависност има клуч (или кандидат клуч) на левата страна, секој атрибут е целосно функционално зависен од клучот. \\
     167**Заклучок: Users е во BCNF.**\\
     168\\
     169**Client, Pharmacist, Admins**\\
     170Овие три релации се специјализации на Users и го користат user_id како примарен клуч. Во Client, атрибутот is_verified зависи единствено од user_id. Кај Pharmacist и Admins нема дополнителни атрибути освен врската со Users. Затоа, за сите три релации, левата страна на секоја функционална зависност е суперклуч. \\
     171**Заклучок: сите три релации се во BCNF.**\\
     172\\
     173**Company**\\
     174Релацијата Company има примарен клуч id, но и registration_number е уникатен и претставува алтернативен клуч. Зависностите се: id → {company_name, description, registration_number} и registration_number → id. И во двата случаи левата страна е клуч, што гарантира исполнување на BCNF. \\
     175**Заклучок: Company е во BCNF.**\\
     176\\
     177**Pharmacy, Distributor, Manufacturer, DeliveryCompany**\\
     178Овие четири релации се специјализации на Company и го користат company_id како примарен клуч. Немаат сопствени не-клучни атрибути, па единствената зависност е company_id → {}. Како што секогаш левата страна е клуч, **сите се во BCNF.**\\
     179\\
     180**Facility**\\
     181Табелата Facility има два клуча: id и code (кој е уникатен). Зависностите се id → {company_id, facility_name, code} и code → id. Во двата случаи, левата страна е суперклуч, со што сите атрибути зависат целосно од клучевите. \\
     182**Заклучок: Facility е во BCNF.**\\
     183\\
     184**Inventory**\\
     185Релацијата Inventory има примарен клуч id и дополнително facility_id е уникатен, што создава уште еден алтернативен клуч. Зависностите се id → facility_id и facility_id → id. Ова е двонасочна зависност помеѓу два клуча. **Затоа релацијата е во BCNF.**\\
     186\\
     187**Medicine**\\
     188Релацијата Medicine има едноставен примарен клуч id. Функционалната зависност е id → {medicine_name, active_ingredient}. Нема дополнителни уникатни ограничувања, па сите атрибути зависат исклучиво од клучот. \\
     189**Заклучок: Medicine е во BCNF.**\\
     190\\
     191**BrandedMedicine**\\
     192Оваа релација го користи id како примарен клуч и содржи повеќе атрибути (manufacturer_id, name, price, description, dosage_form, strength, origin_country). Функционалната зависност е id → {сите останати атрибути}. Производителот може да има повеќе лекови, па manufacturer_id сам по себе не е клуч. Левата страна (id) е клуч, така што **BrandedMedicine е во BCNF.**\\
     193\\
     194**BrandedMedicineImage**\\
     195Тука примарен клуч е id. Зависноста е id → {branded_medicine_id, image}. Бидејќи секој атрибут зависи од примарниот клуч, **релацијата е во BCNF.**\\
     196\\
     197**ContactInformation**\\
     198Примарен клуч е id. Дополнителното ограничување бара секоја контакт информација да се однесува на точно еден објект или точно еден корисник. Зависностите се id → {phone, address, user_id, facility_id}. Сите зависности се со клуч на левата страна, па **ContactInformation е во BCNF.**\\
     199\\
     200**ClubCard**\\
     201Оваа релација има примарен клуч id. Сите останати атрибути (user_id, club_program, points) зависат единствено од овој клуч. Нема транзитивни зависности. Заклучок: **ClubCard е во BCNF.**\\
     202\\
     203**PaymentMethod**\\
     204Со примарен клуч id, единствената зависност е id → method_name. **Затоа релацијата е во BCNF.**\\
     205\\
     206**Payment**\\
     207Релацијата Payment има примарен клуч id. Атрибутите client_id, payment_method_id, payment_date, amount, status зависат директно од id. Нема други уникатни ограничувања што би создале транзитивни зависности. \\
     208**Заклучок: Payment е во BCNF.**\\
     209\\
     210**ClientOrder**\\
     211Оваа релација има два кандидат клуча: id (PK) и payment_id (unique). Зависностите се id → {client_id, delivery_company_id, payment_id, order_date, expected_arrival_date, status, total_price} и payment_id → id. Бидејќи во двата случаи левата страна е клуч, **релацијата е во BCNF.**\\
     212\\
     213**ShoppingCart**\\
     214Примарен клуч е id. Единствената зависност е id → {client_id}. Бидејќи левата страна е клуч, **релацијата е во BCNF.**\\
     215\\
     216**SupplyOrder**\\
     217Примарен клуч е id. Сите останати атрибути (distributor_id, pharmacy_id, order_date, expected_arrival_date, status) зависат од овој клуч. \\
     218**Заклучок: SupplyOrder е во BCNF.**\\
     219\\
     220**HealthProfile**\\
     221Со примарен клуч id, останатите атрибути (client_id, blood_type) зависат исклучиво од клучот. \\
     222**Заклучок: HealthProfile е во BCNF.**\\
     223\\
     224**SensitiveClientData**\\
     225Примарен клуч е id. Сите останати атрибути (client_id, pharmacist_id, embg, portrait_photo, verification_status) зависат од него. \\
     226**Затоа релацијата е во BCNF.**\\
     227\\
     228**Prescription**\\
     229Примарен клуч е id. Функционалната зависност е id → {client_id, medicine_id, issued_by, issued_at, valid_to, embg}. Иако embg може да се повторува за повеќе рецепти, примарниот клуч секогаш е id, што гарантира BCNF. \\
     230**Заклучок: Prescription е во BCNF.**\\
     231\\
     232**ClientOrder_BrandedMedicine**\\
     233Оваа релација ги поврзува клиентските нарачки со брендираните лекови и содржи и атрибут quantity. Примарен клуч е составен: {order_id, branded_medicine_id}. Функционалната зависност е {order_id, branded_medicine_id} → {quantity}. Покривачот (order_id, branded_medicine_id)⁺ = {order_id, branded_medicine_id, quantity}, што ги содржи сите атрибути на релацијата. \\
     234**Затоа ClientOrder_BrandedMedicine е во BCNF.**\\
     235\\
     236**ShoppingCart_BrandedMedicine**\\
     237Оваа релација ги поврзува кошничките со брендираните лекови и содржи количество. Примарен клуч е {shopping_cart_id, branded_medicine_id}. Функционалната зависност е {shopping_cart_id, branded_medicine_id} → {quantity}. Покривачот на составниот клуч ги опфаќа сите атрибути, па нема парцијални ниту транзитивни зависности. **Заклучок: ShoppingCart_BrandedMedicine е во BCNF.**\\
     238\\
     239**SupplyOrder_BrandedMedicine**\\
     240Оваа релација поврзува нарачки за снабдување со брендирани лекови и содржи quantity. Примарен клуч е {supply_order_id, branded_medicine_id}. Зависност: {supply_order_id, branded_medicine_id} → {quantity}. Покривачот на составниот клуч ги содржи сите атрибути. \\
     241**Заклучок: SupplyOrder_BrandedMedicine е во BCNF.**\\
     242\\
     243**Inventory_BrandedMedicine**\\
     244Оваа релација поврзува магацини со брендирани лекови и содржи {quantity, last_changed}. Примарен клуч е {inventory_id, branded_medicine_id}. Зависностите се {inventory_id, branded_medicine_id} → {quantity, last_changed}. Покривачот на составниот клуч ги содржи сите атрибути, што значи дека **е во BCNF.**\\
     245\\
     246**Pharmacy_Catalog**\\
     247Релацијата ги поврзува аптеките со брендирани лекови. Примарен клуч е {pharmacy_id, branded_medicine_id}. Единствената зависност е составниот клуч → {} (нема дополнителни атрибути). Покривачот на клучот ги содржи сите атрибути, па **Pharmacy_Catalog е во BCNF.**\\
     248\\
     249**Distributor_BrandedMedicine**\\
     250Оваа релација поврзува дистрибутери со брендирани лекови. Примарен клуч е {distributor_id, branded_medicine_id}. Нема дополнителни атрибути, па функционалната зависност е {distributor_id, branded_medicine_id} → {}. Бидејќи клучот ги покрива сите атрибути, **Distributor_BrandedMedicine е во BCNF.**\\
     251\\
     252**Branded_Medicine_InstanceOf_Medicine**\\
     253Оваа релација ја врзува врската помеѓу брендирани и генерички лекови. Примарен клуч е {branded_medicine_id, medicine_id}. Зависноста е составниот клуч → {}. Покривачот на клучот ги содржи сите атрибути. \\
     254**Заклучок: Branded_Medicine_InstanceOf_Medicine е во BCNF.**\\
     255\\
     256**AllergicReaction_HealthProfile_Medicine**\\
     257Оваа релација ги поврзува здравствените профили со лекови што предизвикуваат алергиски реакции, и содржи дополнителни атрибути {date_diagnosed, description, severity}. Примарен клуч е {health_profile_id, medicine_id}. Функционалната зависност е {health_profile_id, medicine_id} → {date_diagnosed, description, severity}. Покривачот на составниот клуч ги содржи сите атрибути. **Затоа AllergicReaction_HealthProfile_Medicine е во BCNF.**\\
     258\\
     259**MedicineInteraction**\\
     260Оваа релација ги опишува интеракциите помеѓу парови лекови. Примарен клуч е {medicine_id_1, medicine_id_2}. Дополнителните атрибути се {type, description, severity}. Функционалната зависност е {medicine_id_1, medicine_id_2} → {type, description, severity}. Со оглед дека составниот клуч ги покрива сите атрибути, **MedicineInteraction е во BCNF.**\\