28 | | === 2. Резервации |
29 | | || reservation_id || user_id || table_id || restaurant_id || reservation_date || time_from || time_to || number_of_people || |
30 | | || 1 || 101 || 11 || 201 || 2025-05-01 || 18:00 || 20:00 || 4 || |
31 | | || 2 || 102 || 12 || 202 || 2025-05-02 || 19:30 || 21:00 || 2 || |
32 | | || 3 || 103 || 13 || 203 || 2025-05-03 || 17:00 || 18:30 || 3 || |
| 28 | === 2. Резервации со корисници и маси |
| 29 | || reservation_id || user_id || table_id || reservation_date || check_in_from || check_in_to || number_of_people || restaurant_id || |
| 30 | || 1 || 101 || 11 || 2025-05-01 || 18:00 || 20:00 || 4 ||201 || |
| 31 | || 2 || 102 || 12 || 2025-05-02 || 19:30 || 21:00 || 2 ||202 || |
| 32 | || 3 || 103 || 13 || 2025-05-03 || 17:00 || 18:30 || 3 ||203 || |
93 | | === 3. Историја на резервации |
94 | | || reservation_history_id || user_id || table_id || restaurant_id || reservation_date || time_from || time_to || number_of_people || |
95 | | || 1 || 101 || 11 || 201 || 2025-05-01 || 18:00 || 20:00 || 4 || |
96 | | || 2 || 102 || 12 || 202 || 2025-05-02 || 19:30 || 21:00 || 2 || |
97 | | || 3 || 103 || 13 || 203 || 2025-05-03 || 17:00 || 18:30 || 3 || |
| 93 | === 3. Резервации со корисници и маси |
| 94 | ||reservation_id || reservation_date || time_from || time_to || number_of_people || user_id || user_name || table_id || table_number || restaurant_id || restaurant_name || restaurant_location |
| 95 | ||1 || 2025-05-01 ||18:00 ||20:00 ||4 ||101 ||Ana ||11 ||1 ||201 ||Gino’s ||Skopje, Centar|| |
| 96 | ||2 ||2025-05-02 ||19:30 ||21:00 ||2 ||102 ||Marko ||12 ||2 ||202 ||Sushico ||Skopje, Karposh|| |
| 97 | ||3 ||2025-05-03 ||17:00 ||18:30 ||3 ||103 ||Elena ||13 ||3 ||203 ||Bella Italia ||Skopje, Aerodrom|| |
99 | | Во оваа релација, restaurant_id се повторува иако е функционски зависен од table_id, бидејќи секоја маса припаѓа на еден ресторан. |
100 | | |
101 | | ---- |
102 | | |
103 | | '''Функциски зависности:''' |
104 | | * reservation_history_id → user_id, table_id, restaurant_id, date, time, duration |
105 | | |
106 | | * table_id → restaurant_id |
107 | | |
108 | | '''Анализа на зависности:''' |
109 | | Само лево (детерминанти): |
110 | | * reservation_history_id |
111 | | |
112 | | * table_id |
113 | | |
114 | | Само десно (зависни атрибути): |
115 | | * restaurant_id, user_id, date, time, duration |
116 | | |
117 | | ---- |
118 | | |
119 | | Канонична покривка: |
120 | | Од reservation_history_id може да се добијат сите атрибути, затоа е кандидат клуч. |
121 | | |
122 | | ---- |
123 | | |
124 | | '''Анализа на нормализација:''' |
125 | | |
126 | | Прва нормална форма (1НФ): |
127 | | |
128 | | Сите атрибути се атомски, нема листи или вложени структури. '''Задоволена.''' |
129 | | |
130 | | Втора нормална форма (2НФ): |
131 | | |
132 | | Клучот е едноставен (reservation_history_id), па нема парцијални зависности. '''Задоволена.''' |
133 | | |
134 | | Трета нормална форма (3НФ): |
135 | | |
136 | | Се појавува транзитивна зависност: |
137 | | |
138 | | reservation_history_id → table_id → restaurant_id |
139 | | |
140 | | Значи, restaurant_id е транзитивно зависен од примарниот клуч (reservation_history_id), и '''релацијата не е во 3НФ.''' |
141 | | |
142 | | ----Декомпозиција: |
143 | | R1: Reservation (без дупликација на restaurant_id) |
144 | | |
145 | | * R1(reservation_history_id, user_id, table_id, date, time, duration) |
146 | | |
147 | | R2: Table (со поврзаност со ресторан) |
148 | | |
149 | | * R2(table_id, restaurant_id) |
150 | | |
151 | | ---- |
152 | | |
153 | | '''Финална анализа''' |
154 | | * Нема дуплицирање. |
155 | | |
156 | | * restaurant_id може да се добие преку JOIN со Table. |
| 99 | R = { |
| 100 | reservation_id, reservation_date, time_from, time_to, number_of_people, |
| 101 | user_id, user_name, |
| 102 | table_id, table_number, |
| 103 | restaurant_id, restaurant_name, restaurant_location |
| 104 | } |