| | 243 | === Нормализација на R5 до 3NF |
| | 244 | ФЗс пристурни во оваа релација се: |
| | 245 | |
| | 246 | 1. {{{ thread_id -> thread_created_at, thread_content, topic_title, parent_id, repo_url, project_title }}} |
| | 247 | 2. {{{ project_title -> thread_created_at, thread_content, repo_url }}} |
| | 248 | 3. {{{ {parent_id, topic_title} -> thread_content, thread_created_at }}} |
| | 249 | 4. {{{ parent_id -> thread_created_at, thread_content, topic_title, parent_id, repo_url, project_title, thread_id }}} |
| | 250 | |
| | 251 | {{{ R51(project_title, thread_created_at, thread_content, repo_url) }}} |
| | 252 | {{{ R52(parent_id, topic_title,thread_content, thread_created_at) }}} |
| | 253 | {{{ R53(thread_id, project_title, topic_title, parent_id) }}} |
| | 254 | |
| | 255 | Може да согледаме дека **thread_created_at** и **thread_content** се повторуваат во **R51** и **R52**, па според тоа може да ги изведиме во една заедничка релација, односно релацијата **R53**. |
| | 256 | Според тоа ги добиваме следниве релации: |
| | 257 | |
| | 258 | {{{ R51(project_title, repo_url) }}} |
| | 259 | {{{ R52(parent_id, topic_title) }}} |
| | 260 | {{{ R53(thread_id, project_title, topic_title, parent_id, thread_created_at, thread_content) }}} |
| | 261 | |
| | 262 | Од тоа што **thread** може да е или проект или топик, но не и двете, тоа повлекува дека: |
| | 263 | |
| | 264 | - **thread** е проект -> **topic_title**, **parent_id** се null вредности. |
| | 265 | - **thread** е топик -> **project_title** е null вредност. |
| | 266 | |
| | 267 | Со цел да избегнеме null вредности и да обезбедиме **lossless join** ќе го направиме следното: |
| | 268 | |
| | 269 | - **R51** ќе додадеме **thread_id** (за постигнување на **lossless join**), додека од **R53** ќе отстраниме **project_title**. |
| | 270 | - **R52** ќе додадеме **thread_id** (за постигнување на **lossless join**), додека од **R53** ќе остраниме **topic_title**, **parent_id**. |
| | 271 | |
| | 272 | Со тоа ги добиваме следниве релации: |
| | 273 | |
| | 274 | {{{ R51(project_title, repo_url, thread_id) }}} |
| | 275 | {{{ R52(parent_id, topic_title, thread_id) }}} |
| | 276 | {{{ R53(thread_id, thread_created_at, thread_content) }}} |
| | 277 | |
| | 278 | === Нормализација на R51 до BCNF |
| | 279 | Eдинстевни ФЗ присутни во оваа релација се: |
| | 280 | 1. {{{ thread_id -> repo_url,project_title }}} |
| | 281 | 2. {{{ project_title -> repo_url, thread_id }}} |
| | 282 | |
| | 283 | Лесно се согледува дека {{{ thread_id }}} и {{{project_title}}} се кандидат клучеви, па според тоа бидејќи немаме ниту еден атрибут на левата старна во ФЗти, кои не е кандидат клуч, релацијата е во BCNF. |
| | 284 | |
| | 285 | Притоа да согледаме дека **R51** е релацијата **project_thread**. |
| | 286 | |
| | 287 | === Нормализација на R52 до BCNF |
| | 288 | Eдинстевни ФЗ присутни во оваа релација се: |
| | 289 | 1. {{{ thread_id -> topic_title,parent_id }}} |
| | 290 | 2. {{{ {topic_title,parent_id} -> thread_id }}} |
| | 291 | 3. {{{ parent_id -> topic_title, thread_id }}} |
| | 292 | |
| | 293 | Бијдеќи {{{ parent_id }}} и {{{thread_id}}} се кандидат клучеви( {{{ {parent_id, topic_title} }}} е супер клуч) не постои ФЗ, во која левата страна не е супер клуч. Тоа значи дека **R52** e во BCNF. |
| | 294 | |
| | 295 | Притоа да согледаме дека **R52** е релацијата **topic_thread**. |
| | 296 | |
| | 297 | === Нормализација на R53 до BCNF |
| | 298 | Eдинстевни ФЗ присутни во оваа релација се: |
| | 299 | 1. {{{ thread_id -> thread_created_at, thread_content }}} |
| | 300 | |
| | 301 | Бидејќи само {{{ thread_id }}} e кандидат клуч, не постои ФЗ во која левата страна не е супер клуч. Според тоа **R53** е во BCNF. |
| | 302 | |
| | 303 | Притоа да согледаме дека **R53** е релацијата **thread**. |
| | 304 | |