Changes between Version 12 and Version 13 of Normalization
- Timestamp:
- 09/22/25 22:23:29 (11 hours ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Normalization
v12 v13 1 1 Note: 2 - moderator_id izbrishi nasekade 2 3 3 - klaj unique constraint na (parent_id,topic_title) 4 4 - тргни start_at vo moderator - thread. … … 19 19 topic_thread: guidelines, topic_title, parent_id 20 20 project_thread: repo_url, project_title, 21 is_moderated_by: moderator_started_at,22 21 associated_with: asc_started_at, asc_ended_at, 23 22 channel: channel_name, channel_description, channel_UUID … … 40 39 5. {{{ {blacklisted_about_user,user_id, thread_id, blacklisted_start_date} -> blacklisted_end_date, reason }}} 41 40 42 6. {{{ {thread_id, user_id} -> moderator_started_at }}} 43 44 7. {{{ thread_id -> thread_created_at, thread_content }}} 45 46 8. {{{ thread_id -> guidelines, topic_title, parent_id }}} 47 48 9. {{{ thread_id -> repo_url, project_title }}} 49 50 10. {{{ {thread_id, user_id } -> asc_started_at, asc_ended_at }}} 51 52 11. {{{ channel_UUID -> channel_name,channel_description}}} 41 6. {{{ thread_id -> thread_created_at, thread_content }}} 42 43 7. {{{ thread_id -> guidelines, topic_title, parent_id }}} 44 45 8. {{{ thread_id -> repo_url, project_title }}} 46 47 9. {{{ {thread_id, user_id } -> asc_started_at, asc_ended_at }}} 48 49 10. {{{ channel_UUID -> channel_name,channel_description}}} 53 50 54 51 12. {{{ {thread_id, msg_send_at, user_id } -> msg_content }}} … … 56 53 13. {{{ pr_id -> pr_name, pr_override_type }}} 57 54 58 1 5. {{{ parent_id -> thread_id }}}59 60 1 6. {{{ project_title -> repo_url, thread_id, thread_created_at, thread_content }}}61 62 1 7. {{{ {parent_id, topic_title} -> guidelines, thread_id, thread_created_at, thread_content }}}63 64 1 8. {{{ {pr_name, thread_id} -> pr_override_type }}}65 66 1 9. {{{ blacklisted_about_user -> user_id }}}55 14. {{{ parent_id -> thread_id }}} 56 57 15. {{{ project_title -> repo_url, thread_id, thread_created_at, thread_content }}} 58 59 16. {{{ {parent_id, topic_title} -> guidelines, thread_id, thread_created_at, thread_content }}} 60 61 17. {{{ {pr_name, thread_id} -> pr_override_type }}} 62 63 18. {{{ blacklisted_about_user -> user_id }}} 67 64 68 65 === Изведени ФЗ … … 82 79 83 80 > **LHS**: 84 >> {{{ submission_id, moderator_id,blacklisted_start_date, msg_send_at,pr_id,tag_name,perm_name,blacklisted_about_user, channel_UUID}}}81 >> {{{ submission_id,blacklisted_id,blacklisted_start_date, msg_send_at,pr_id,tag_name,perm_name,blacklisted_about_user, channel_UUID}}} 85 82 86 83 > **RHS**: 87 >> {{{ description, password, registered_at, email, sex,is_active,name, feedback_submission_type, feedback_created_at, feedback_description, submission_status, submission_created_at, submission_description,blacklisted_end_date, reason, tag_name,thread_created_at, thread_content, guidelines,repo_url, moderator_started_at,asc_started_at, channel_description, perm_name, pr_override_type, msg_content }}}84 >> {{{ description, password, registered_at, email, sex,is_active,name, feedback_submission_type, feedback_created_at, feedback_description, submission_status, submission_created_at, submission_description,blacklisted_end_date, reason, tag_name,thread_created_at, thread_content, guidelines,repo_url, asc_started_at, channel_description, perm_name, pr_override_type, msg_content }}} 88 85 89 86 > **LHS & RHS**: … … 138 135 user_id, 139 136 blacklisted_start_date 137 blacklisted_id 140 138 msg_send_at 141 139 pr_id … … 162 160 username, description, password, registered_at, email, sex,is_active,name, 163 161 blacklisted_end_date, reason, 164 moderator_started_at,165 162 thread_created_at, thread_content, 166 163 topic_title, parent_id, … … 173 170 }}} 174 171 175 {{{ R1(user_id,username, description, password, registered_at, email, sex,is_active,name) }}} /done176 177 {{{ R2(submission_id,feedback_submission_type, feedback_created_at, feedback_description,submission_status, submission_created_at, submission_description)}}} / done172 {{{ R1(user_id,username, description, password, registered_at, email, sex,is_active,name) }}} 173 174 {{{ R2(submission_id,feedback_submission_type, feedback_created_at, feedback_description,submission_status, submission_created_at, submission_description)}}} 178 175 179 176 {{{ R3(blacklisted_about_user,user_id, thread_id, blacklisted_start_date,blacklisted_end_date, reason) }}} 180 177 181 {{{ R4(thread_id, user_id, moderator_started_at, moderator_started_at) }}} /done 182 183 {{{ R5(thread_id,thread_created_at, thread_content,topic_title, parent_id,repo_url, project_title) }}} /done 184 185 {{{ R6(channel_UUID,channel_name,channel_description) }}} /done 186 187 {{{ R7(pr_id,pr_name, pr_override_type) }}} /done 188 189 {{{ R8(thread_id, msg_send_at, user_id,msg_content) }}} /done 178 179 {{{ R4(thread_id,thread_created_at, thread_content,topic_title, parent_id,repo_url, project_title) }}} 180 181 {{{ R5(channel_UUID,channel_name,channel_description) }}} 182 183 {{{ R6(pr_id,pr_name, pr_override_type) }}} 184 185 {{{ R7(thread_id, msg_send_at, user_id,msg_content) }}} 190 186 191 {{{ R 9(thread_id,user_id,asc_started_at, asc_ended_at) }}} #thread_id, user_id / done192 193 {{{ R 10(perm_name) }}} / done194 {{{ R1 1(tag_name) }}} / done187 {{{ R8(thread_id,user_id,asc_started_at, asc_ended_at) }}} 188 189 {{{ R9(perm_name) }}} 190 {{{ R10(tag_name) }}} 195 191 196 192 === Нормализација на R1 до 3NF … … 249 245 250 246 251 === Нормализација на R4 до BCNF 252 Единствена ФЗ присутна во оваа релациja е: 253 254 255 {{{ {thread_id, user_id} -> moderator_started_at}}} 256 257 R4 е веќе во BCNF, заради тоа што единствената ФЗ го вклучува суперклучот и нема транзитивни зависимости. 258 259 === Нормализација на R5 до 3NF 247 === Нормализација на R4 до 3NF 260 248 ФЗс пристурни во оваа релација се: 261 249 … … 265 253 4. {{{ parent_id -> thread_created_at, thread_content, topic_title, parent_id, repo_url, project_title, thread_id }}} 266 254 267 {{{ R 51(project_title, thread_created_at, thread_content, repo_url) }}}268 {{{ R 52(parent_id, topic_title,thread_content, thread_created_at) }}}269 {{{ R 53(thread_id, project_title, topic_title, parent_id) }}}270 271 Може да согледаме дека **thread_created_at** и **thread_content** се повторуваат во **R 51** и **R52**, па според тоа може да ги изведиме во една заедничка релација, односно релацијата **R53**.255 {{{ R41(project_title, thread_created_at, thread_content, repo_url) }}} 256 {{{ R42(parent_id, topic_title,thread_content, thread_created_at) }}} 257 {{{ R43(thread_id, project_title, topic_title, parent_id) }}} 258 259 Може да согледаме дека **thread_created_at** и **thread_content** се повторуваат во **R41** и **R42**, па според тоа може да ги изведиме во една заедничка релација, односно релацијата **R43**. 272 260 Според тоа ги добиваме следниве релации: 273 261 274 {{{ R 51(project_title, repo_url) }}}275 {{{ R 52(parent_id, topic_title) }}}276 {{{ R 53(thread_id, project_title, topic_title, parent_id, thread_created_at, thread_content) }}}262 {{{ R41(project_title, repo_url) }}} 263 {{{ R42(parent_id, topic_title) }}} 264 {{{ R43(thread_id, project_title, topic_title, parent_id, thread_created_at, thread_content) }}} 277 265 278 266 Од тоа што **thread** може да е или проект или топик, но не и двете, тоа повлекува дека: … … 283 271 Со цел да избегнеме null вредности и да обезбедиме **lossless join** ќе го направиме следното: 284 272 285 - **R 51** ќе додадеме **thread_id** (за постигнување на **lossless join**), додека од **R53** ќе отстраниме **project_title**.286 - **R 52** ќе додадеме **thread_id** (за постигнување на **lossless join**), додека од **R53** ќе остраниме **topic_title**, **parent_id**.273 - **R41** ќе додадеме **thread_id** (за постигнување на **lossless join**), додека од **R43** ќе отстраниме **project_title**. 274 - **R42** ќе додадеме **thread_id** (за постигнување на **lossless join**), додека од **R43** ќе остраниме **topic_title**, **parent_id**. 287 275 288 276 Со тоа ги добиваме следниве релации: 289 277 290 {{{ R 51(project_title, repo_url, thread_id) }}}291 {{{ R 52(parent_id, topic_title, thread_id) }}}292 {{{ R 53(thread_id, thread_created_at, thread_content) }}}293 294 === Нормализација на R 51 до BCNF278 {{{ R41(project_title, repo_url, thread_id) }}} 279 {{{ R42(parent_id, topic_title, thread_id) }}} 280 {{{ R43(thread_id, thread_created_at, thread_content) }}} 281 282 === Нормализација на R41 до BCNF 295 283 Eдинстевни ФЗ присутни во оваа релација се: 296 284 1. {{{ thread_id -> repo_url,project_title }}} … … 299 287 Лесно се согледува дека {{{ thread_id }}} и {{{project_title}}} се кандидат клучеви, па според тоа бидејќи немаме ниту еден атрибут на левата старна во ФЗти, кои не е кандидат клуч, релацијата е во BCNF. 300 288 301 Притоа да согледаме дека **R 51** е релацијата **project_thread**.302 303 === Нормализација на R 52 до BCNF289 Притоа да согледаме дека **R41** е релацијата **project_thread**. 290 291 === Нормализација на R42 до BCNF 304 292 Eдинстевни ФЗ присутни во оваа релација се: 305 293 1. {{{ thread_id -> topic_title,parent_id }}} … … 307 295 3. {{{ parent_id -> topic_title, thread_id }}} 308 296 309 Бијдеќи {{{ parent_id }}} и {{{thread_id}}} се кандидат клучеви( {{{ {parent_id, topic_title} }}} е супер клуч) не постои ФЗ, во која левата страна не е супер клуч. Тоа значи дека **R 52** e во BCNF.310 311 Притоа да согледаме дека **R 52** е релацијата **topic_thread**.312 313 === Нормализација на R 53 до BCNF297 Бијдеќи {{{ parent_id }}} и {{{thread_id}}} се кандидат клучеви( {{{ {parent_id, topic_title} }}} е супер клуч) не постои ФЗ, во која левата страна не е супер клуч. Тоа значи дека **R42** e во BCNF. 298 299 Притоа да согледаме дека **R42** е релацијата **topic_thread**. 300 301 === Нормализација на R43 до BCNF 314 302 Eдинстевни ФЗ присутни во оваа релација се: 315 303 1. {{{ thread_id -> thread_created_at, thread_content }}} 316 304 317 Бидејќи само {{{ thread_id }}} e кандидат клуч, не постои ФЗ во која левата страна не е супер клуч. Според тоа **R53** е во BCNF. 318 319 Притоа да согледаме дека **R53** е релацијата **thread**. 305 Бидејќи само {{{ thread_id }}} e кандидат клуч, не постои ФЗ во која левата страна не е супер клуч. Според тоа **R43** е во BCNF. 306 307 Притоа да согледаме дека **R43** е релацијата **thread**. 308 309 === Нормализација на R5 до BCNF 310 Единствена ФЗ присутна во оваа релациja е: 311 312 {{{channel_UUID -> channel_name,channel_description}}} 313 314 R6 е веќе во BCNF, заради тоа што единствената ФЗ го вклучува суперклучот и нема транзитивни зависимости. 315 316 Притоа да согледаме дека **R5** е релацијата **channel**. 320 317 321 318 === Нормализација на R6 до BCNF 322 319 Единствена ФЗ присутна во оваа релациja е: 323 320 324 {{{ channel_UUID -> channel_name,channel_description}}}325 326 R6е веќе во BCNF, заради тоа што единствената ФЗ го вклучува суперклучот и нема транзитивни зависимости.327 328 Притоа да согледаме дека **R6** е релацијата **channel**.321 {{{pr_id -> pr_name, pr_override_type}}} 322 323 **R6** е веќе во BCNF, заради тоа што единствената ФЗ го вклучува суперклучот и нема транзитивни зависимости. 324 325 Да заприметиме дека **R6** е уствари **project_role**. 329 326 330 327 === Нормализација на R7 до BCNF 331 328 Единствена ФЗ присутна во оваа релациja е: 332 329 333 {{{ pr_id -> pr_name, pr_override_type}}}334 335 R7е веќе во BCNF, заради тоа што единствената ФЗ го вклучува суперклучот и нема транзитивни зависимости.336 337 Да заприметиме дека **R7** е уствари **project_role**. 338 339 === Нормализација на R8 до BCNF 330 {{{ {thread_id, msg_send_at, user_id} -> msg_content}}} 331 332 **R7** е веќе во BCNF, заради тоа што единствената ФЗ го вклучува суперклучот и нема транзитивни зависимости. 333 334 Притоа да согледаме дека **R7* е релацијата **messages**. 335 336 === Нормализација на R8 до BCNF 340 337 Единствена ФЗ присутна во оваа релациja е: 341 338 342 {{{ {thread_id, msg_send_at, user_id} -> msg_content}}}343 344 R8 е веќе во BCNF, заради тоа што единствената ФЗ го вклучува суперклучот и нема транзитивни зависимости.345 346 Пр итоа да согледаме дека **R8** е релацијата **messages**.339 {{{{thread_id,user_id} -> asc_started_at, asc_ended_at}}} 340 341 **R8** е веќе во BCNF, заради тоа што единствената ФЗ го вклучува суперклучот и нема транзитивни зависности. 342 343 Пртиоа да согледаме дека **R8** е релацијата ** developer_associated_with_project**. 347 344 348 345 === Нормализација на R9 до BCNF 349 Единствена ФЗ присутна во оваа релациja е: 350 351 {{{{thread_id,user_id} -> asc_started_at, asc_ended_at}}} 352 353 R9 е веќе во BCNF, заради тоа што единствената ФЗ го вклучува суперклучот и нема транзитивни зависности. 354 355 Пртиоа да согледаме дека **R9** е релацијата ** developer_associated_with_project**. 356 357 === Нормализација на R10 до BCNF 358 Најпрвин да заприметиме дека R10 е уствари релацијата **permissions**. 359 360 Бидејќи немаме транзитивни релации и бидејќи {{{ perm_name+ = {perm_name} }}} е супер клуч на релацијата, добиваме дека **R1** е во BCNF. 361 362 === Нормализација на R11 363 Најпрвин да заприметиме декa R11 е уствари релацијата **tag**. Исто како и кај **R10**, лесно се согледува дека и оваа релација е во BCNF. 364 346 Најпрвин да заприметиме дека R9 е всушност релацијата **permissions**. 347 348 Бидејќи немаме транзитивни релации и бидејќи {{{ perm_name+ = {perm_name} }}} е супер клуч на релацијата, добиваме дека **R9** е во BCNF. 349 350 === Нормализација на R10 351 Најпрвин да заприметиме декa R10 е уствари релацијата **tag**. Исто како и кај **R9**, лесно се согледува дека и оваа релација е во BCNF. 352