1 | | = Users |
2 | | |
3 | | {{{USERS(id, name, email, password, is_admin)}}} |
| 1 | = Функционални зависности = |
| 2 | |
| 3 | Дадена е релационата шема за базата на податоци која ја креиравме, која може да |
| 4 | се претстави во една релација со сите атрибути од сите релации споени заедно. |
| 5 | Секако, дупликатите ќе бидат отстранети при тоа што ова не претставува проблем. |
| 6 | Нека {{{R}}} биде релацијата опишана како што следи: |
| 7 | |
| 8 | {{{ |
| 9 | R( |
| 10 | id, name, email, password, is_admin, |
| 11 | country, registration_number, tax_code, contact_person, phone_number, |
| 12 | billing_address, shipping_address, address, producer_id, description, |
| 13 | hs_code, price, unit_of_measure, batch_code, production_date, expiration_date, |
| 14 | net_weight, gross_weight, units_per_batch, transport_id, departure_point, |
| 15 | arrival_point, estimated_departure_date, estimated_arrival_date, incoterm, |
| 16 | insurance_conditions, status, estimated_delivery_date, buyer_id, receiver_id, |
| 17 | amount, currency, due_date, exchange_rate, payment_date, payment_method, |
| 18 | payment_status, quantity, price_per_unit, total_price, created_at, updated_at |
| 19 | ) |
| 20 | }}} |
| 21 | |
| 22 | == Иницијални функционални зависности |
| 23 | |
| 24 | 1. {{{id → name, email, password, is_admin}}} |
| 25 | |
| 26 | 2. {{{producer_id → address, country, phone_number, email}}} |
| 27 | |
| 28 | 3. {{{product_id → name, description, hs_code, price, unit_of_measure}}} |
| 29 | |
| 30 | 4. {{{batch_id → batch_code, production_date, expiration_date, net_weight, gross_weight, units_per_batch}}} |
| 31 | |
| 32 | 5. {{{transport_id → departure_point, arrival_point, estimated_departure_date, estimated_arrival_date, incoterm, insurance_conditions}}} |
| 33 | |
| 34 | 6. {{{order_id → date, status, estimated_delivery_date, buyer_id, receiver_id, transport_id}}} |
| 35 | |
| 36 | 7. {{{payment_id → amount, currency, due_date, exchange_rate, payment_date, payment_method, payment_status, order_id}}} |
| 37 | |
| 38 | 8. {{{order_batch_id → quantity, price_per_unit, total_price, created_at, updated_at, order_id, batch_id}}} |
| 39 | |
| 40 | == Изведени функционални зависности кои не се присутни во иницијалниот список |
| 41 | |
| 42 | === Транзитивни |
| 43 | |
| 44 | {{{order_id → buyer_id, receiver_id, transport_id (од FD 6)}}} |
| 45 | |
| 46 | Изведено: |
| 47 | |
| 48 | 9. {{{order_id → status, estimated_delivery_date}}} |
| 49 | |
| 50 | == Анализа на функционални зависности користејќи LHS/RHS класификација |
| 51 | |
| 52 | Ова е методот за анализа на функционалните зависности преку групирање на атрибутите во три категории |
| 53 | |
| 54 | {{{LHS}}} — атрибути кои се појавуваат само на левата страна (како детерминанти) |
| 55 | {{{RHS}}} — атрибути кои се појавуваат само на десната страна (како зависности) |
| 56 | {{{LHS + RHS}}} — атрибути кои се појавуваат и на двете страни на зависностите |
| 57 | |
| 58 | Оваа техника помага при разбирање на улогата на атрибутите во одредувањето на другите, и е корисна за нормализација и откривање на кандидатни клучеви. |
| 59 | |
| 60 | === Класификација на атрибути |
| 61 | |
| 62 | ==== Само LHS |
| 63 | |
| 64 | Атрибути кои се појавуваат само како детерминанти: |
| 65 | |
| 66 | {{{id, producer_id, product_id, batch_id, transport_id, order_id, payment_id, order_batch_id}}} |
| 67 | |
| 68 | Овие атрибути се потенцијални {{{кандидатни клучеви}}}, бидејќи тие го одредуваат другите атрибути и самите не се одредени од ништо друго. |
| 69 | |
| 70 | ==== Само RHS |
| 71 | |
| 72 | Атрибути кои се појавуваат само како зависности: |
| 73 | |
| 74 | {{{ |
| 75 | name, email, password, is_admin, country, registration_number, tax_code, |
| 76 | contact_person, phone_number, billing_address, shipping_address, description, |
| 77 | hs_code, price, unit_of_measure, batch_code, production_date, expiration_date, |
| 78 | net_weight, gross_weight, units_per_batch, departure_point, arrival_point, |
| 79 | estimated_departure_date, estimated_arrival_date, incoterm, |
| 80 | insurance_conditions, status, estimated_delivery_date, currency, due_date, |
| 81 | exchange_rate, payment_date, payment_method, payment_status, quantity, |
| 82 | price_per_unit, total_price, created_at, updated_at |
| 83 | }}} |
| 84 | |
| 85 | Овие се неклучни атрибути, кои мора да бидат целосно и неконфузно зависни од кандидатните клучеви во повисоки нормални форми (2NF, 3NF). |
| 86 | |
| 87 | ==== LHS + RHS |
| 88 | |
| 89 | Атрибути кои се појавуваат и на левата и на десната страна на функционалните зависности: |
| 90 | |
| 91 | {{{product_id, batch_id, transport_id, order_id}}} |
| 92 | |
| 93 | Овие атрибути можат да воведат некои транзитивни зависности и проблеми. |
| 94 | |
| 95 | == LHS Транзитивен closure |
| 96 | |
| 97 | Нека {{{X+ = {order_id, transport_id, payment_id}}}} |
| 98 | |
| 99 | Пресметување на атрибутната затвореност за сетот {{{X}}} ќе даде: |
| 100 | |
| 101 | {{{ |
| 102 | X+ = { |
| 103 | order_id, transport_id, payment_id, |
| 104 | name, email, password, is_admin, country, registration_number, |
| 105 | tax_code, contact_person, phone_number, billing_address, shipping_address, |
| 106 | description, hs_code, price, unit_of_measure, batch_code, production_date, |
| 107 | expiration_date, net_weight, gross_weight, units_per_batch, |
| 108 | departure_point, arrival_point, estimated_departure_date, estimated_arrival_date, |
| 109 | incoterm, insurance_conditions, status, estimated_delivery_date, currency, |
| 110 | due_date, exchange_rate, payment_date, payment_method, payment_status, |
| 111 | quantity, price_per_unit, total_price, created_at, updated_at |
| 112 | } |
| 113 | }}} |
| 114 | |
| 115 | Оваа релација не го прикажува сетот на атрибути {{{X}}} како кандидатен клуч, но |
| 116 | ако додадеме product_id и batch_id за да формираме сет {{{Y = {order_id, |
| 117 | transport_id, payment_id, product_id, batch_id}}}}, ќе добиеме следната |
| 118 | атрибутна затвореност: |
| 119 | |
| 120 | {{{ |
| 121 | Y+ = { |
| 122 | order_id, transport_id, payment_id, product_id, batch_id, |
| 123 | name, email, password, is_admin, country, registration_number, |
| 124 | tax_code, contact_person, phone_number, billing_address, shipping_address, |
| 125 | description, hs_code, price, unit_of_measure, batch_code, production_date, |
| 126 | expiration_date, net_weight, gross_weight, units_per_batch, |
| 127 | departure_point, arrival_point, estimated_departure_date, estimated_arrival_date, |
| 128 | incoterm, insurance_conditions, status, estimated_delivery_date, currency, |
| 129 | due_date, exchange_rate, payment_date, payment_method, payment_status, |
| 130 | quantity, price_per_unit, total_price, created_at, updated_at |
| 131 | } |
| 132 | }}} |
| 133 | |
| 134 | Додавањето само на {{{product_id}}} или {{{batch_id}}} нема да даде кандидатен |
| 135 | клуч, бидејќи ќе недостигаат информации за производот или партијата. Сето ова |
| 136 | дава сите атрибути. Затоа, сетот на атрибути Y може да се третира како |
| 137 | кандидатен клуч и се прогласува како примарен клуч овде. |
| 138 | |
| 139 | = Нормализирање |
| 140 | |
| 141 | == Тековна нормална форма |
| 142 | |
| 143 | Дадени функционални зависности, релацијата {{{R}}} веќе е во {{{1NF}}} согласно |
| 144 | со дефиницијата, бидејќи нема мултивредносни атрибути. |
| 145 | |
| 146 | Базата на податоци е имплементирана со SQL DDL, што значи дека релационата шема |
| 147 | е внатрешно во {{{1NF}}} |
| 148 | |
| 149 | Заклучуваме дека {{{R}}} ја задоволува {{{1NF}}}. Но според дефиницијата на |
| 150 | {{{2NF}}}, релација е во {{{2NF}}} ако: |
| 151 | |
| 152 | - Таа веќе е во прва нормална форма {{{1NF}}} |
| 153 | - Нема парцијални зависности на никакви непријатни атрибути (определени |
| 154 | атрибути) од стриктен подсет на било кој кандидатен клуч |
| 155 | |
| 156 | Но релацијата не е во {{{2NF}}} поради тоа што имаме јасни парцијални |
| 157 | зависности. Контрапример е {{{batch_id → batch_code, production_date}}} - но има |
| 158 | и повеќе. |
| 159 | |
| 160 | == Декомпозиција на {{{R}}} во нови релации за да се постигне {{{BCNF}}} |
| 161 | |
| 162 | Започнуваме со раздвојување на {{{R}}} групирајќи ги детерминантите на ЛС со ДС, |
| 163 | за да добиеме следниве релации: |
| 164 | |
| 165 | === {{{USER}}} |
17 | | - **1NF**: Табелата {{{CLIENTS}}} е во **1NF** затоа што сите атрибути содржат атомски вредности и нема дупликат вредности. Адресата за наплата и испорака, и сите други атрибути се одвоени и не се повторуваат. |
18 | | - **2NF**: Табелата е во **2NF** затоа што сите атрибути зависат целосно од примарниот клуч {{{id}}}. Не постојат делумни релации, бидејќи сите атрибути се однесуваат на целиот ентитет (клиент). |
19 | | - **BCNF**: Табелата е во **BCNF** затоа што секоја релација е целосно зависна од примарниот клуч и нема транзитивни релации. Нема не-клучни атрибути кои зависат од друг не-клучен атрибут. |
20 | | |
21 | | Во новата база на податоци, табелата {{{CLIENTS}}} ги заменува старите табели {{{BUYER}}} и {{{RECEIVER}}}. Оваа промена беше направена за да се поедностави структурата на базата и да се избегне двојна евиденција за истите ентитети. Наместо две посебни табели (една за купувачи и друга за примачи), сега и купувачите и примачите се чуваат во една табела, што е поефикасно и попрактично за управување со податоците. |
22 | | |
23 | | {{{BUYER}}} и {{{RECEIVER}}} беа две различни табели, со различни атрибути за секој ентитет. Секој купувач имаше своја табела за информации поврзани со купувањето, а секој примач имаше посебна табела за податоците за испорака. |
24 | | |
25 | | {{{CLIENTS}}} сега ја обединува оваа функционалност, бидејќи и купувачот и примачот може да бидат идентификувани како клиенти. Табелата {{{CLIENTS}}} вклучува целокупната информација за компаниите кои учествуваат во процесот на продажба и испорака, вклучувајќи и {{{billing_address}}} и {{{shipping_address}}}, кои се претходно разликувани помеѓу купувачот и примачот. |
26 | | |
27 | | = Transports |
28 | | |
29 | | {{{TRANSPORTS(id, name, departure_point, arrival_point, estimated_departure_date, estimated_arrival_date, incoterm, insurance_conditions)}}} |
30 | | |
31 | | {{{id → name, departure_point, arrival_point, estimated_departure_date, estimated_arrival_date, incoterm, insurance_conditions}}} |
32 | | |
33 | | - **1NF**: Табелата е во **1NF** бидејќи секое поле содржи атомски вредности и нема дупликат вредности. |
34 | | - **2NF**: Табелата е во **2NF** бидејќи сите атрибути зависат целосно од примарниот клуч. Нема делумни релации. |
35 | | - **BCNF**: Табелата е во **BCNF** бидејќи секоја релација е целосно зависна од примарниот клуч и нема транзитивни релации. |
36 | | |
37 | | = Producers |
38 | | |
39 | | {{{PRODUCERS(id, name, address, country, phone_number, email)}}} |
40 | | |
41 | | {{{id → name, address, country, phone_number, email}}} |
42 | | |
43 | | - **1NF**: Табелата е во **1NF** бидејќи секое поле содржи атомски вредности и нема дупликат вредности. |
44 | | - **2NF**: Табелата е во **2NF** бидејќи сите атрибути зависат целосно од примарниот клуч. Нема делумни релации. |
45 | | - **BCNF**: Табелата е во **BCNF** бидејќи нема транзитивни релации и сите атрибути зависат целосно од примарниот клуч. |
46 | | |
47 | | = Products |
48 | | |
49 | | {{{PRODUCTS(id, name, description, hs_code, price, producer_id* (PRODUCERS), unit_of_measure)}}} |
50 | | |
51 | | {{{id → name, description, hs_code, price, producer_id, unit_of_measure}}} |
52 | | |
53 | | - **1NF**: Табелата е во **1NF** бидејќи секое поле содржи атомски вредности и нема дупликат вредности. |
54 | | - **2NF**: Табелата е во **2NF** бидејќи сите атрибути зависат целосно од примарниот клуч. Надворешниот клуч {{{producer_id}}} не создава делумни релации. |
55 | | - **BCNF**: Табелата е во **BCNF** бидејќи сите атрибути зависат целосно од примарниот клуч и нема транзитивни релации. |
56 | | |
57 | | = Batches |
58 | | |
59 | | {{{BATCHES(id, product_id* (PRODUCTS), batch_code, production_date, expiration_date, net_weight, gross_weight, units_per_batch)}}} |
60 | | |
61 | | {{{id → product_id, batch_code, production_date, expiration_date, net_weight, gross_weight, units_per_batch}}} |
62 | | |
63 | | - **1NF**: Табелата {{{BATCHES}}} е во **1NF** бидејќи секое поле содржи атомски вредности. Нема дупликат вредности или структурни комплификации. Секој ред претставува една серија и не постојат атрибути кои содржат повеќе од една вредност. |
64 | | - **2NF**: Табелата {{{BATCHES}}} е во **2NF** бидејќи сите атрибути зависат целосно од примарниот клуч {{{id}}}. Надворешниот клуч {{{product_id}}} не создава делумни релации. Секој атрибут во табелата е директно поврзан со целокупниот идентитет на серијата, кој е идентификуван преку примарниот клуч. |
65 | | - **BCNF**: Табелата {{{BATCHES}}} е во **BCNF** затоа што нема транзитивни релации. Сите атрибути зависат целосно од примарниот клуч {{{id}}} и нема релации каде не-клучни атрибути зависат од други не-клучни атрибути. |
66 | | |
67 | | Во новата база на податоци, табелата {{{BATCHES}}} е додадена како нова структура која ги претставува сериите. Оваа табела е важна за управување со производите во контекст на сериите, нивните рокови на траење и друга релевантна продукциска информација. |
68 | | |
69 | | = Orders |
70 | | |
71 | | {{{ORDERS(id, date, status, estimated_delivery_date, buyer_id* (CLIENTS), receiver_id* (CLIENTS), transport_id* (TRANSPORTS), payment_id* (PAYMENTS))}}} |
72 | | |
73 | | {{{id → date, status, estimated_delivery_date, buyer_id, receiver_id, transport_id, payment_id}}} |
74 | | |
75 | | - **1NF**: Табелата е во **1NF** бидејќи сите атрибути содржат атомски вредности и нема дупликат вредности. |
76 | | - **2NF**: Табелата е во **2NF** бидејќи сите атрибути зависат целосно од примарниот клуч. Foreign keys ({{{buyer_id}}}, {{{receiver_id}}}, {{{transport_id}}}, {{{payment_id}}}) не создаваат делумни релации. |
77 | | - **BCNF**: Табелата е во **BCNF** бидејќи секоја релација е целосно зависна од примарниот клуч и нема транзитивни релации. |
78 | | |
79 | | = Order Batches |
80 | | |
81 | | {{{ORDER_BATCHES(id, order_id* (ORDERS), batch_id* (BATCHES), quantity, price_per_unit, total_price, created_at, updated_at)}}} |
82 | | |
83 | | {{{id → order_id, batch_id, quantity, price_per_unit, total_price, created_at, updated_at}}} |
84 | | |
85 | | - **1NF**: Табелата е во **1NF** бидејќи сите атрибути содржат атомски вредности и нема дупликат вредности. |
86 | | - **2NF**: Табелата е во **2NF** бидејќи сите атрибути зависат целосно од примарниот клуч составен од {{{order_id}}} и {{{batch_id}}}. |
87 | | - **BCNF**: Табелата е во **BCNF** бидејќи нема транзитивни релации и сите релации се од примарните клучеви. |
88 | | |
89 | | Табелата {{{ORDER_BATCHES}}} е нов додаток во базата кој овозможува детален и прецизен запис на сериите кои се дел од некоја нарачка. Ова ја заменува претходната едноставна табела {{{ORDER_PRODUCT}}} и го подобрува групирањето на производите. |
90 | | |
91 | | = Invoices |
92 | | |
93 | | Оваа табела е отстранета, бидејќи е редундантна. Содржи информации кои се повторуваат. Иницијално, целта на {{INVOICES}} табелата беше да се креира ставка за фактура во базата, но по многу размислување, одлучено беше тотално да се отстрани оваа табела, заедно со {{{PACKING_LISTS}}} табелата, бидејќи фактура може динамички да се генерира од {{{ORDERS}}} табелата. |
94 | | |
95 | | = Packing Lists |
96 | | |
97 | | Причината е иста како за {{{INVOICES}}} табелата. |
98 | | |
99 | | = Payments |
100 | | |
101 | | {{{PAYMENTS(id, order_id* (ORDERS), amount, currency, due_date, exchange_rate, payment_date, payment_method, payment_status)}}} |
102 | | |
103 | | {{{id → order_id, amount, currency, due_date, exchange_rate, payment_date, payment_method, payment_status}}} |
104 | | |
105 | | - **1NF**: Табелата е во **1NF** бидејќи сите атрибути содржат атомски вредности и нема дупликат вредности. |
106 | | - **2NF**: Табелата е во **2NF** бидејќи сите атрибути зависат целосно од примарниот клуч. Надворешниот клуч {{{order_id}}} не создава делумни релации. |
107 | | - **BCNF**: Табелата е во **BCNF** бидејќи сите атрибути зависат целосно од примарниот клуч и нема транзитивни релации. |
| 175 | {{{R2(id, name, country, registration_number, tax_code, contact_person, phone_number, billing_address, shipping_address)}}} |
| 176 | |
| 177 | === {{{PRODUCER}}} |
| 178 | |
| 179 | {{{producer_id → address, country, phone_number, email}}} |
| 180 | |
| 181 | {{{R3(producer_id, address, country, phone_number, email)}}} |
| 182 | |
| 183 | === {{{PRODUCT}}} |
| 184 | |
| 185 | {{{product_id → name, description, hs_code, price, unit_of_measure}}} |
| 186 | |
| 187 | {{{R4(product_id, name, description, hs_code, price, unit_of_measure)}}} |
| 188 | |
| 189 | === {{{BATCH}}} |
| 190 | |
| 191 | {{{batch_id → batch_code, production_date, expiration_date, net_weight, gross_weight, units_per_batch}}} |
| 192 | |
| 193 | {{{R5(batch_id, batch_code, production_date, expiration_date, net_weight, gross_weight, units_per_batch)}}} |
| 194 | |
| 195 | === {{{TRANSPORT}}} |
| 196 | |
| 197 | {{{transport_id → departure_point, arrival_point, estimated_departure_date, estimated_arrival_date, incoterm, insurance_conditions}}} |
| 198 | |
| 199 | {{{R6(transport_id, departure_point, arrival_point, estimated_departure_date, estimated_arrival_date, incoterm, insurance_conditions)}}} |
| 200 | |
| 201 | === {{{ORDER}}} |
| 202 | |
| 203 | {{{order_id → date, status, estimated_delivery_date, buyer_id, receiver_id, transport_id}}} |
| 204 | |
| 205 | {{{R7(order_id, date, status, estimated_delivery_date, buyer_id, receiver_id, transport_id)}}} |
| 206 | |
| 207 | === {{{PAYMENT}}} |
| 208 | |
| 209 | {{{payment_id → amount, currency, due_date, exchange_rate, payment_date, payment_method, payment_status, order_id}}} |
| 210 | |
| 211 | {{{R8(payment_id, amount, currency, due_date, exchange_rate, payment_date, payment_method, payment_status, order_id)}}} |
| 212 | |
| 213 | === {{{ORDER_BATCHES}}} |
| 214 | |
| 215 | {{{order_batch_id → quantity, price_per_unit, total_price, created_at, updated_at, order_id, batch_id}}} |
| 216 | |
| 217 | {{{R9(order_batch_id, quantity, price_per_unit, total_price, created_at, updated_at, order_id, batch_id)}}} |
| 218 | |
| 219 | == Проверка на нормалната форма после првата декомпозиција |
| 220 | |
| 221 | === {{{USER}}} |
| 222 | |
| 223 | Атрибути |
| 224 | |
| 225 | {{{id, name, email, password, is_admin}}} |
| 226 | |
| 227 | Функционални зависности |
| 228 | |
| 229 | {{{id → name, email, password, is_admin}}} |
| 230 | |
| 231 | Кандидатен клуч: {{{id}}} |
| 232 | |
| 233 | Оваа релација е во {{{2NF}}} бидејќи не постојат парцијални зависности. |
| 234 | |
| 235 | За постигнување {{{3NF}}}, не се јавуваат транзитивни зависности, така да оваа |
| 236 | релација е во {{{3NF}}}. |
| 237 | |
| 238 | Исто така, бидејќи id е кандидатен клуч, релацијата е и во {{{BCNF}}}. |
| 239 | |
| 240 | === {{{CLIENT}}} |
| 241 | |
| 242 | Атрибути |
| 243 | |
| 244 | {{{id, name, country, registration_number, tax_code, contact_person, phone_number, billing_address, shipping_address}}} |
| 245 | |
| 246 | Функционални зависности |
| 247 | |
| 248 | {{{id → name, country, registration_number, tax_code, contact_person, phone_number, billing_address, shipping_address}}} |
| 249 | |
| 250 | Кандидатен клуч {{{id}}} |
| 251 | |
| 252 | Оваа релација е во {{{2NF}}} и не се појавуваат транзитивни зависности, така да е во {{{3NF}}} и во {{{BCNF}}}. |
| 253 | |
| 254 | === {{{PRODUCER}}} |
| 255 | |
| 256 | Атрибути |
| 257 | |
| 258 | {{{producer_id, address, country, phone_number, email}}} |
| 259 | |
| 260 | Функционални зависности |
| 261 | |
| 262 | {{{producer_id → address, country, phone_number, email}}} |
| 263 | |
| 264 | Кандидатен клуч {{{producer_id}}} |
| 265 | |
| 266 | И оваа релација е во {{{2NF}}}, {{{3NF}}} и {{{BCNF}}}. |
| 267 | |
| 268 | === {{{PRODUCT}}} |
| 269 | |
| 270 | Атрибути |
| 271 | |
| 272 | {{{product_id, name, description, hs_code, price, unit_of_measure}}} |
| 273 | |
| 274 | Функционални зависности |
| 275 | |
| 276 | {{{product_id → name, description, hs_code, price, unit_of_measure}}} |
| 277 | |
| 278 | Кандидатен клуч {{{product_id}}} |
| 279 | |
| 280 | Оваа релација е во {{{2NF}}}, {{{3NF}}} и {{{BCNF}}}. |
| 281 | |
| 282 | === {{{BATCH}}} |
| 283 | |
| 284 | Атрибути |
| 285 | |
| 286 | {{{batch_id, batch_code, production_date, expiration_date, net_weight, gross_weight, units_per_batch}}} |
| 287 | |
| 288 | Функционални зависности |
| 289 | |
| 290 | {{{batch_id → batch_code, production_date, expiration_date, net_weight, gross_weight, units_per_batch}}} |
| 291 | |
| 292 | Кандидатен клуч {{{batch_id}}} |
| 293 | |
| 294 | Релацијата е во {{{2NF}}}, {{{3NF}}} и {{{BCNF}}}. |
| 295 | |
| 296 | === {{{TRANSPORT}}} |
| 297 | |
| 298 | Атрибути |
| 299 | |
| 300 | {{{transport_id, departure_point, arrival_point, estimated_departure_date, estimated_arrival_date, incoterm, insurance_conditions}}} |
| 301 | |
| 302 | Функционални зависности |
| 303 | |
| 304 | {{{transport_id → departure_point, arrival_point, estimated_departure_date, estimated_arrival_date, incoterm, insurance_conditions}}} |
| 305 | |
| 306 | Кандидатен клуч {{{transport_id}}} |
| 307 | |
| 308 | Оваа релација е во {{{2NF}}}, {{{3NF}}} и {{{BCNF}}}. |
| 309 | |
| 310 | === {{{ORDER}}} |
| 311 | |
| 312 | Атрибути |
| 313 | |
| 314 | {{{order_id, date, status, estimated_delivery_date, buyer_id, receiver_id, transport_id}}} |
| 315 | |
| 316 | Функционални зависности |
| 317 | |
| 318 | {{{order_id → date, status, estimated_delivery_date, buyer_id, receiver_id, transport_id}}} |
| 319 | |
| 320 | Кандидатен клуч {{{order_id}}} |
| 321 | |
| 322 | Релацијата е во {{{2NF}}}, {{{3NF}}} и {{{BCNF}}}. |
| 323 | |
| 324 | === {{{PAYMENT}}} |
| 325 | |
| 326 | Атрибути |
| 327 | |
| 328 | {{{payment_id, amount, currency, due_date, exchange_rate, payment_date, payment_method, payment_status, order_id}}} |
| 329 | |
| 330 | Функционални зависности |
| 331 | |
| 332 | {{{payment_id → amount, currency, due_date, exchange_rate, payment_date, payment_method, payment_status, order_id}}} |
| 333 | |
| 334 | Кандидатен клуч {{{payment_id}}} |
| 335 | |
| 336 | Релацијата е во {{{2NF}}}, {{{3NF}}} и {{{BCNF}}}. |
| 337 | |
| 338 | === {{{ORDER_BATCHES}}} |
| 339 | |
| 340 | Атрибути |
| 341 | |
| 342 | {{{order_batch_id, quantity, price_per_unit, total_price, created_at, updated_at, order_id, batch_id}}} |
| 343 | |
| 344 | Функционални зависности |
| 345 | |
| 346 | {{{order_batch_id → quantity, price_per_unit, total_price, created_at, updated_at, order_id, batch_id}}} |
| 347 | |
| 348 | Кандидатен клуч {{{order_batch_id}}} |
| 349 | |
| 350 | Релацијата е во {{{2NF}}}, {{{3NF}}} и {{{BCNF}}}. |