Changes between Version 21 and Version 22 of Normalization


Ignore:
Timestamp:
08/06/26 12:41:58 (34 hours ago)
Author:
231175
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Normalization

    v21 v22  
    2727tag_translate_id, tag_value )
    2828}}}
    29 
    30 '''Забелешка за јазикот:''' Во претходната верзија секоја релација за превод носеше сопствен атрибут за јазик (course_translate_language, content_translate_language, lecture_language, tag_translate_language). Во новиот модел јазикот е самостоен ентитет (Language), па сите четири релации за превод упатуваат кон истиот атрибут language_id. Во универзалната релација тоа значи дека една торка ги содржи преводите на еден ист јазик.
    31 
    32 '''Забелешка за сметките:''' Атрибутите за најава (email, password_hash, name) се издвоени во ентитетот Account. Затоа Expert повеќе не носи сопствени атрибути за име и мејл, туку само упатување кон Account.
    3329
    3430----
     
    7369 * '''FD33:''' meeting_link → meeting_reminder_id
    7470'''}'''
    75 
    76 '''Забелешка:''' FD6 го содржи payment_id на десната страна бидејќи ограничувањето `uq_payment_enrollment` дозволува најмногу една наплата по запишување. FD33 произлегува од ограничувањето `uq_meeting_email_reminder_link`. FD30 произлегува од `uq_account_email`, а FD32 од `uq_language_value`.
    7771
    7872----
     
    169163
    170164 * '''verification_token_uuid''' - мора да биде дел од секој кандидат клуч
     165 * '''meeting_reminder_id''' - мора да биде дел од секој кандидат клуч (или meeting_link, FD33)
    171166 * '''expert_id''' - мора да биде дел од секој кандидат клуч
    172167 * '''course_what_will_be_learned''' - мора да биде дел од секој кандидат клуч
    173168 * '''user_favorite_course_ids''' - мора да биде дел од секој кандидат клуч
    174 
    175 '''Меѓусебно зависни парови:''' Атрибутите meeting_reminder_id и meeting_link меѓусебно се определуваат (FD3 и FD33), а ниту еден друг атрибут не ги определува. Затоа точно еден од нив мора да биде дел од секој кандидат клуч; го избираме meeting_reminder_id. Истото важи и за парот account_id и account_email, но тие се достапни преку FD1 од user_id, па не мора да бидат во клучот.
    176169
    177170=== 3.4 Пресметка на затворач ===
     
    422415== 5. 2NF Декомпозиција ==
    423416
    424 '''Забелешка за надворешните клучеви:''' При секоја декомпозиција, атрибутот кој служи како надворешен клуч (account_id, language_id, course_id, course_content_id, ...) се пренесува во новата релација, но останува и во базната релација сè додека не се извлече неговиот сопствен ентитет.
    425 
    426417=== Чекор 5.1: Декомпозиција по FD2 (verification_token_uuid → ...) ===
    427418
     
    776767 * meeting_reminder_id → user_id → user_*?
    777768   * user_* атрибутите НЕ се во Meeting_Reminder.
    778  * meeting_link → meeting_reminder_id (FD33) е зависност кон клучот, не транзитивна зависност.
    779769
    780770'''Заклучок:''' Meeting_Reminder е во 3NF ✓
     
    917907)
    918908}}}
    919 
    920 '''Забелешка:''' payment_id и review_id се дел од десната страна на FD6 (заради ограничувањата `uq_payment_enrollment` и `uq_review_enrollment`), но не се внесуваат како атрибути во Enrollment. Наместо тоа, врската се чува преку enrollment_id во Payment и Review, што ја избегнува циклична зависност помеѓу трите релации.
    921909
    922910'''Проверка за lossless join:''' Може да се реконструира преку enrollment_id
     
    11711159||= FD =||= Детерминант =||= Суперклуч? =||
    11721160|| account_id → сите || account_id || ✓ ДА ||
    1173 || account_email → сите (FD30) || account_email || ✓ ДА ||
    11741161
    11751162'''Account е во BCNF''' ✓
     
    11791166||= FD =||= Детерминант =||= Суперклуч? =||
    11801167|| language_id → сите || language_id || ✓ ДА ||
    1181 || language_value → сите (FD32) || language_value || ✓ ДА ||
    11821168
    11831169'''Language е во BCNF''' ✓
     
    11941180||= FD =||= Детерминант =||= Суперклуч? =||
    11951181|| meeting_reminder_id → сите || meeting_reminder_id || ✓ ДА ||
    1196 || meeting_link → сите (FD33) || meeting_link || ✓ ДА ||
    11971182
    11981183'''Meeting_Reminder е во BCNF''' ✓
     
    12091194||= FD =||= Детерминант =||= Суперклуч? =||
    12101195|| tag_translate_id → сите || tag_translate_id || ✓ ДА ||
    1211 || (tag_id, language_id) → сите (FD24) || tag_id, language_id || ✓ ДА ||
    12121196
    12131197'''Tag_Translate е во BCNF''' ✓
     
    12171201||= FD =||= Детерминант =||= Суперклуч? =||
    12181202|| course_translate_id → сите || course_translate_id || ✓ ДА ||
    1219 || (course_id, language_id) → сите (FD21) || course_id, language_id || ✓ ДА ||
    12201203
    12211204'''Course_Translate е во BCNF''' ✓
     
    12251208||= FD =||= Детерминант =||= Суперклуч? =||
    12261209|| course_content_translate_id → сите || course_content_translate_id || ✓ ДА ||
    1227 || (course_content_id, language_id) → сите (FD23) || course_content_id, language_id || ✓ ДА ||
    12281210
    12291211'''Course_Content_Translate е во BCNF''' ✓
     
    12331215||= FD =||= Детерминант =||= Суперклуч? =||
    12341216|| course_lecture_translate_id → сите || course_lecture_translate_id || ✓ ДА ||
    1235 || (course_lecture_id, language_id) → сите (FD22) || course_lecture_id, language_id || ✓ ДА ||
    12361217
    12371218'''Course_Lecture_Translate е во BCNF''' ✓
     
    12411222||= FD =||= Детерминант =||= Суперклуч? =||
    12421223|| user_course_progress_id → сите || user_course_progress_id || ✓ ДА ||
    1243 || (enrollment_id, course_lecture_id) → сите (FD25) || enrollment_id, course_lecture_id || ✓ ДА ||
    12441224
    12451225'''User_Course_Progress е во BCNF''' ✓
     
    12491229||= FD =||= Детерминант =||= Суперклуч? =||
    12501230|| user_id → сите || user_id || ✓ ДА ||
    1251 || user_email → сите (FD18) || user_email || ✓ ДА ||
    12521231
    12531232'''User е во BCNF''' ✓
     
    12711250||= FD =||= Детерминант =||= Суперклуч? =||
    12721251|| payment_id → сите || payment_id || ✓ ДА ||
    1273 || enrollment_id → сите (FD6) || enrollment_id || ✓ ДА ||
    12741252
    12751253'''Payment е во BCNF''' ✓
     
    12791257||= FD =||= Детерминант =||= Суперклуч? =||
    12801258|| review_id → сите || review_id || ✓ ДА ||
    1281 || enrollment_id → сите (FD6) || enrollment_id || ✓ ДА ||
    12821259
    12831260'''Review е во BCNF''' ✓
     
    12941271||= FD =||= Детерминант =||= Суперклуч? =||
    12951272|| course_version_id → сите || course_version_id || ✓ ДА ||
    1296 || (course_id, version_number) → сите (FD20) || course_id, version_number || ✓ ДА ||
    12971273
    12981274'''Course_Version е во BCNF''' ✓
     
    13021278||= FD =||= Детерминант =||= Суперклуч? =||
    13031279|| course_content_id → сите || course_content_id || ✓ ДА ||
    1304 || (course_version_id, content_position) → сите (FD26) || course_version_id, content_position || ✓ ДА ||
    13051280
    13061281'''Course_Content е во BCNF''' ✓
     
    13101285||= FD =||= Детерминант =||= Суперклуч? =||
    13111286|| course_lecture_id → сите || course_lecture_id || ✓ ДА ||
    1312 || (course_content_id, lecture_position) → сите (FD27) || course_content_id, lecture_position || ✓ ДА ||
    13131287
    13141288'''Course_Lecture е во BCNF''' ✓
     
    14931467 1. '''Процесот на нормализација го потврди најголемиот дел од дизајнот''' - секоја декомпозиција базирана на функционалните зависности резултираше со релација која одговара на ентитет од оригиналниот модел, освен во три случаи: Account, Language и намалениот Expert.
    14941468
    1495  2. '''Клучот на универзалната релација''' - примарниот клуч беше идентификуван како композитен клуч од 10 атрибути: {verification_token_uuid, meeting_reminder_id, expert_id, course_what_will_be_learned, user_favorite_course_ids, user_course_progress_id, course_lecture_translate_id, course_content_translate_id, course_translate_id, tag_translate_id}. Овој клуч беше идентификуван преку анализа на функционалните зависности и класификација лева/десна страна на атрибутите. По 1NF декомпозицијата, атрибутите course_what_will_be_learned и user_favorite_course_ids се извлекуваат, па клучот на базната релација се сведува на 8 атрибути.
     1469 2. '''Клучот на универзалната релација''' - примарниот клуч беше идентификуван како композитен клуч од 10 атрибути: {verification_token_uuid, meeting_reminder_id, expert_id, course_what_will_be_learned, user_favorite_course_ids, user_course_progress_id, course_lecture_translate_id, course_content_translate_id, course_translate_id, tag_translate_id}. Овој клуч беше идентификуван преку анализа на функционалните зависности и класификација лева/десна страна на атрибутите.
    14961470
    14971471 3. '''Декомпозицијата е lossless''' - на секој чекор од процесот на нормализација, оригиналната информација може да се реконструира преку JOIN операции на заедничките атрибути (foreign keys).
     
    15011475 5. '''Many-to-many релации''' - junction tables (Expert_Course, Course_Tag, User_Tag) не произлегуваат од функционални зависности, туку од ER моделот и бизнис логиката. Овие релации немаат свои атрибути освен composite primary key од два foreign keys.
    15021476
    1503  6. '''Издвојувањето на Account''' - оваа релација произлезе од функционалните зависности FD19 и FD30, кои не постоеја во P2. Во P2 атрибутите за најава беа дуплирани во User и Expert, што претставува редундантност: промена на лозинка би барала ажурирање на две релации.
    1504 
    15051477==== Заклучок ====
    15061478
    1507 Процесот на нормализација '''го потврди најголемиот дел од дизајнот''' од концептуалната фаза (P2), но воведе и три разлики: издвојување на Account, издвојување на Language и намалување на Expert. Ова покажува дека оригиналниот ER модел беше во голема мера креиран според принципите на добра база на податоци (минимална редундантност, јасна сепарација на концепти, правилна идентификација на ентитети и релации), но дека дуплираните атрибути за најава и текстуалниот атрибут за јазик беа извори на редундантност кои нормализацијата ги отстрани.
     1479Процесот на нормализација '''го потврди најголемиот дел од дизајнот''' од концептуалната фаза (P2). Ова покажува дека оригиналниот ER модел беше во голема мера креиран според принципите на добра база на податоци (минимална редундантност, јасна сепарација на концепти, правилна идентификација на ентитети и релации).
    15081480
    15091481'''Финалниот релационен модел се разликува од моделот од Фаза P2 во три релации: Account, Language и Expert'''.