Changes between Version 14 and Version 15 of normalization


Ignore:
Timestamp:
01/30/26 10:57:35 (5 hours ago)
Author:
231175
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • normalization

    v14 v15  
    443443Universal_Relation_Shifter_Base_3(
    444444user_id, user_name, user_email, user_login_provider, user_password_hash, user_verified, user_profile_complete, user_used_free_consultation, user_company_size, user_work_position, user_points,
    445 expert_id
     445expert_id,
    446446course_id, course_image_url, course_color, course_difficulty, course_duration_minutes, course_price,
    447447course_version_id, version_number, version_creation_date, version_active,
     
    627627
    628628{{{
     629Course_What_Will_Be_Learned(course_translate_id, course_what_will_be_learned)
     630   PK: {course_translate_id, course_what_will_be_learned}
     631
    629632Verification_Token(verification_token_uuid, token_created_at, token_expired_at, user_id)
    630633   PK: verification_token_uuid
     
    964967=== Состојба после 3NF декомпозиција ===
    965968
     969'''Релации креирани преку FD декомпозиција:'''
     970
     971'''1NF Декомпозиција (1 релација):'''
    966972||= Релација =||= Атрибути =||= Примарен клуч =||
    967 || '''Verification_Token''' || token_created_at, token_expired_at, user_id || verification_token_uuid ||
    968 || '''Meeting_Reminder''' || meeting_at, meeting_scheduled_at, meeting_sent, meeting_link, user_id || meeting_reminder_id ||
    969 || '''Expert''' || expert_name, expert_email, expert_login_provider, expert_password_hash || expert_id ||
    970 || '''Tag_Translate''' || tag_translate_language, tag_value, tag_id || tag_translate_id ||
    971 || '''Course_Translate''' || course_translate_language, course_title_short, course_title, course_description_short, course_description, course_description_long, course_id || course_translate_id ||
    972 || '''Course_Content_Translate''' || content_translate_title, content_translate_language, course_content_id || course_content_translate_id ||
    973 || '''Course_Lecture_Translate''' || lecture_title, lecture_language, lecture_content_file_name, lecture_description, lecture_content_text, course_lecture_id || course_lecture_translate_id ||
    974 || '''User_Course_Progress''' || progress_completed, progress_completed_at, enrollment_id, course_lecture_id || user_course_progress_id ||
    975 || '''User''' || user_name, user_email, user_login_provider, user_password_hash, user_verified, user_profile_complete, user_used_free_consultation, user_company_size, user_work_position, user_points || user_id ||
    976 || '''Course''' || course_image_url, course_color, course_difficulty, course_duration_minutes, course_price || course_id ||
    977 || '''Enrollment''' || enrollment_status, enrollment_purchase_date, enrollment_activation_date, enrollment_completion_date, user_id, course_version_id, payment_id, review_id || enrollment_id ||
    978 || '''Payment''' || payment_amount, payment_date, payment_method, payment_status, enrollment_id || payment_id ||
    979 || '''Review''' || review_rating, review_comment, review_date, enrollment_id || review_id ||
    980 || '''Tag''' || tag_type || tag_id ||
    981 || '''Course_Version''' || version_number, version_creation_date, version_active, course_id || course_version_id ||
    982 || '''Course_Content''' || content_position, course_version_id || course_content_id ||
    983 || '''Course_Lecture''' || lecture_duration_minutes, lecture_position, lecture_content_type, course_content_id || course_lecture_id ||
     973|| Course_What_Will_Be_Learned || course_translate_id, course_what_will_be_learned || (course_translate_id, course_what_will_be_learned) ||
     974
     975'''2NF Декомпозиција (8 релации):'''
     976||= Релација =||= Атрибути =||= Примарен клуч =||
     977|| Verification_Token || verification_token_uuid, token_created_at, token_expired_at, user_id || verification_token_uuid ||
     978|| Meeting_Reminder || meeting_reminder_id, meeting_at, meeting_scheduled_at, meeting_sent, meeting_link, user_id || meeting_reminder_id ||
     979|| Expert || expert_id, expert_name, expert_email, expert_login_provider, expert_password_hash || expert_id ||
     980|| Tag_Translate || tag_translate_id, tag_translate_language, tag_value, tag_id || tag_translate_id ||
     981|| Course_Translate || course_translate_id, course_translate_language, course_title_short, course_title, course_description_short, course_description, course_description_long, course_id || course_translate_id ||
     982|| Course_Content_Translate || course_content_translate_id, content_translate_title, content_translate_language, course_content_id || course_content_translate_id ||
     983|| Course_Lecture_Translate || course_lecture_translate_id, lecture_title, lecture_language, lecture_content_file_name, lecture_description, lecture_content_text, course_lecture_id || course_lecture_translate_id ||
     984|| User_Course_Progress || user_course_progress_id, progress_completed, progress_completed_at, enrollment_id, course_lecture_id || user_course_progress_id ||
     985
     986'''3NF Декомпозиција (9 релации):'''
     987||= Релација =||= Атрибути =||= Примарен клуч =||
     988|| User || user_id, user_name, user_email, user_login_provider, user_password_hash, user_verified, user_profile_complete, user_used_free_consultation, user_company_size, user_work_position, user_points || user_id ||
     989|| Course || course_id, course_image_url, course_color, course_difficulty, course_duration_minutes, course_price || course_id ||
     990|| Course_Version || course_version_id, version_number, version_creation_date, version_active, course_id || course_version_id ||
     991|| Enrollment || enrollment_id, enrollment_status, enrollment_purchase_date, enrollment_activation_date, enrollment_completion_date, user_id, course_version_id, payment_id, review_id || enrollment_id ||
     992|| Payment || payment_id, payment_amount, payment_date, payment_method, payment_status, enrollment_id || payment_id ||
     993|| Review || review_id, review_rating, review_comment, review_date, enrollment_id || review_id ||
     994|| Tag || tag_id, tag_type || tag_id ||
     995|| Course_Content || course_content_id, content_position, course_version_id || course_content_id ||
     996|| Course_Lecture || course_lecture_id, lecture_duration_minutes, lecture_position, lecture_content_type, course_content_id || course_lecture_id ||
     997
     998'''Дополнителни релации (не од FD декомпозиција):'''
     999||= Релација =||= Атрибути =||= Примарен клуч =||= Извор =||
     1000|| User_Tag || user_id, tag_id || (user_id, tag_id) || Many-to-many (ER модел) ||
     1001|| Course_Tag || course_id, tag_id || (course_id, tag_id) || Many-to-many (ER модел) ||
     1002|| Expert_Course || expert_id, course_id || (expert_id, course_id) || Many-to-many (ER модел) ||
    9841003
    9851004----
     
    9911010За секоја релација проверуваме: за секоја нетривијална FD X → Y, дали X е суперклуч?
    9921011
    993 ==== R1 (Product) ====
    994 
    995 ||= FD =||= Детерминант =||= Суперклуч? =||
    996 || productId → сите || productId || ✓ ДА ||
    997 || product_sku → сите (FD6) || product_sku || ✓ ДА (кандидат клуч) ||
    998 
    999 '''R1 е во BCNF''' ✓
    1000 
    1001 ==== R2 (Sale) ====
    1002 
    1003 ||= FD =||= Детерминант =||= Суперклуч? =||
    1004 || saleId → сите || saleId || ✓ ДА ||
    1005 
    1006 '''R2 е во BCNF''' ✓
    1007 
    1008 ==== R3 (!PurchaseOrder) ====
    1009 
    1010 ||= FD =||= Детерминант =||= Суперклуч? =||
    1011 || poId → сите || poId || ✓ ДА ||
    1012 
    1013 '''R3 е во BCNF''' ✓
    1014 
    1015 ==== R4 (!SaleItem) ====
    1016 
    1017 ||= FD =||= Детерминант =||= Суперклуч? =||
    1018 || {saleId, productId} → сите || {saleId, productId} || ✓ ДА ||
    1019 
    1020 '''R4 е во BCNF''' ✓
    1021 
    1022 ==== R5 (!PurchaseOrderItem) ====
    1023 
    1024 ||= FD =||= Детерминант =||= Суперклуч? =||
    1025 || {poId, productId} → сите || {poId, productId} || ✓ ДА ||
    1026 
    1027 '''R5 е во BCNF''' ✓
    1028 
    1029 ==== R6 (User) ====
    1030 
    1031 ||= FD =||= Детерминант =||= Суперклуч? =||
    1032 || userId → сите || userId || ✓ ДА ||
    1033 || user_username → сите (FD2) || user_username || ✓ ДА (кандидат клуч) ||
    1034 || user_email → сите (FD3) || user_email || ✓ ДА (кандидат клуч) ||
    1035 
    1036 '''R6 е во BCNF''' ✓
    1037 
    1038 ==== R7 (Customer) ====
    1039 
    1040 ||= FD =||= Детерминант =||= Суперклуч? =||
    1041 || customerId → сите || customerId || ✓ ДА ||
    1042 
    1043 '''R7 е во BCNF''' ✓
    1044 
    1045 ==== R8 (Category) ====
    1046 
    1047 ||= FD =||= Детерминант =||= Суперклуч? =||
    1048 || categoryId → сите || categoryId || ✓ ДА ||
    1049 
    1050 '''R8 е во BCNF''' ✓
    1051 
    1052 ==== R9 (Supplier) ====
    1053 
    1054 ||= FD =||= Детерминант =||= Суперклуч? =||
    1055 || supplierId → сите || supplierId || ✓ ДА ||
    1056 
    1057 '''R9 е во BCNF''' ✓
    1058 
    1059 ==== R10 (Warehouse) ====
    1060 
    1061 ||= FD =||= Детерминант =||= Суперклуч? =||
    1062 || warehouseId → сите || warehouseId || ✓ ДА ||
    1063 
    1064 '''R10 е во BCNF''' ✓
    1065 
    1066 ==== R11 (!WarehouseStock) ====
    1067 
    1068 ||= FD =||= Детерминант =||= Суперклуч? =||
    1069 || {warehouseId, productId} → сите || {warehouseId, productId} || ✓ ДА ||
    1070 
    1071 '''R11 е во BCNF''' ✓
     1012==== Verification_Token ====
     1013
     1014||= FD =||= Детерминант =||= Суперклуч? =||
     1015|| verification_token_uuid → сите || verification_token_uuid || ✓ ДА ||
     1016
     1017'''Verification_Token е во BCNF''' ✓
     1018
     1019==== Meeting_Reminder ====
     1020
     1021||= FD =||= Детерминант =||= Суперклуч? =||
     1022|| meeting_reminder_id → сите || meeting_reminder_id || ✓ ДА ||
     1023
     1024'''Meeting_Reminder е во BCNF''' ✓
     1025
     1026==== Expert ====
     1027
     1028||= FD =||= Детерминант =||= Суперклуч? =||
     1029|| expert_id → сите || expert_id || ✓ ДА ||
     1030
     1031'''Expert е во BCNF''' ✓
     1032
     1033==== Tag_Translate ====
     1034
     1035||= FD =||= Детерминант =||= Суперклуч? =||
     1036|| tag_translate_id → сите || tag_translate_id || ✓ ДА ||
     1037
     1038'''Tag_Translate е во BCNF''' ✓
     1039
     1040==== Course_Translate ====
     1041
     1042||= FD =||= Детерминант =||= Суперклуч? =||
     1043|| course_translate_id → сите || course_translate_id || ✓ ДА ||
     1044
     1045'''Course_Translate е во BCNF''' ✓
     1046
     1047==== Course_Content_Translate ====
     1048
     1049||= FD =||= Детерминант =||= Суперклуч? =||
     1050|| course_content_translate_id → сите || course_content_translate_id || ✓ ДА ||
     1051
     1052'''Course_Content_Translate е во BCNF''' ✓
     1053
     1054==== Course_Lecture_Translate ====
     1055
     1056||= FD =||= Детерминант =||= Суперклуч? =||
     1057|| course_lecture_translate_id → сите || course_lecture_translate_id || ✓ ДА ||
     1058
     1059'''Course_Lecture_Translate е во BCNF''' ✓
     1060
     1061==== User_Course_Progress ====
     1062
     1063||= FD =||= Детерминант =||= Суперклуч? =||
     1064|| user_course_progress_id → сите || user_course_progress_id || ✓ ДА ||
     1065
     1066'''User_Course_Progress е во BCNF''' ✓
     1067
     1068==== User ====
     1069
     1070||= FD =||= Детерминант =||= Суперклуч? =||
     1071|| user_id → сите || user_id || ✓ ДА ||
     1072
     1073'''User е во BCNF''' ✓
     1074
     1075==== Course ====
     1076
     1077||= FD =||= Детерминант =||= Суперклуч? =||
     1078|| course_id → сите || course_id || ✓ ДА ||
     1079
     1080'''Course е во BCNF''' ✓
     1081
     1082==== Enrollment ====
     1083
     1084||= FD =||= Детерминант =||= Суперклуч? =||
     1085|| enrollment_id → сите || enrollment_id || ✓ ДА ||
     1086
     1087'''Enrollment е во BCNF''' ✓
     1088
     1089==== Payment ====
     1090
     1091||= FD =||= Детерминант =||= Суперклуч? =||
     1092|| payment_id → сите || payment_id || ✓ ДА ||
     1093
     1094'''Payment е во BCNF''' ✓
     1095
     1096==== Review ====
     1097
     1098||= FD =||= Детерминант =||= Суперклуч? =||
     1099|| review_id → сите || review_id || ✓ ДА ||
     1100
     1101'''Review е во BCNF''' ✓
     1102
     1103==== Tag ====
     1104
     1105||= FD =||= Детерминант =||= Суперклуч? =||
     1106|| tag_id → сите || tag_id || ✓ ДА ||
     1107
     1108'''Tag е во BCNF''' ✓
     1109
     1110==== Course_Version ====
     1111
     1112||= FD =||= Детерминант =||= Суперклуч? =||
     1113|| course_version_id → сите || course_version_id || ✓ ДА ||
     1114
     1115'''Course_Version е во BCNF''' ✓
     1116
     1117==== Course_Content ====
     1118
     1119||= FD =||= Детерминант =||= Суперклуч? =||
     1120|| course_content_id → сите || course_content_id || ✓ ДА ||
     1121
     1122'''Course_Content е во BCNF''' ✓
     1123
     1124==== Course_Lecture ====
     1125
     1126||= FD =||= Детерминант =||= Суперклуч? =||
     1127|| course_lecture_id → сите || course_lecture_id || ✓ ДА ||
     1128
     1129'''Course_Lecture е во BCNF''' ✓
     1130
    10721131
    10731132'''Заклучок: Сите релации се во BCNF.'''
     
    10801139
    10811140{{{
    1082 User(userId, username, password, full_name, email, role, is_active)
    1083   - Примарен клуч: userId
    1084   - Кандидат клучеви: userId, username, email
     1141User(user_id, user_name, user_email, user_login_provider, user_password_hash, user_verified, user_profile_complete, user_used_free_consultation, user_company_size, user_work_position, user_points)
     1142  - Примарен клуч: user_id
     1143  - Кандидат клучеви: user_id, user_email
    10851144  - Надворешни клучеви: -
    10861145
    1087 Customer(customerId, name, email, phone, address)
    1088   - Примарен клуч: customerId
    1089   - Кандидат клучеви: customerId
     1146Expert(expert_id, expert_name, expert_email, expert_login_provider, expert_password_hash)
     1147  - Примарен клуч: expert_id
     1148  - Кандидат клучеви: expert_id, expert_email
    10901149  - Надворешни клучеви: -
    10911150
    1092 Category(categoryId, name, description)
    1093   - Примарен клуч: categoryId
    1094   - Кандидат клучеви: categoryId
     1151Verification_Token(verification_token_uuid, token_created_at, token_expired_at, user_id)
     1152  - Примарен клуч: verification_token_uuid
     1153  - Кандидат клучеви: verification_token_uuid
     1154  - Надворешни клучеви: user_id
     1155
     1156Meeting_Reminder(meeting_reminder_id, meeting_at, meeting_scheduled_at, meeting_sent, meeting_link, user_id)
     1157  - Примарен клуч: meeting_reminder_id
     1158  - Кандидат клучеви: meeting_reminder_id, meeting_link
     1159  - Надворешни клучеви: user_id
     1160
     1161Enrollment(enrollment_id, enrollment_status, enrollment_purchase_date, enrollment_activation_date, enrollment_completion_date, user_id, course_version_id, payment_id, review_id)
     1162  - Примарен клуч: enrollment_id
     1163  - Кандидат клучеви: enrollment_id
     1164  - Надворешни клучеви: user_id, course_version_id, payment_id, review_id
     1165
     1166Payment(payment_id, payment_amount, payment_date, payment_method, payment_status, enrollment_id)
     1167  - Примарен клуч: payment_id
     1168  - Кандидат клучеви: payment_id
     1169  - Надворешни клучеви: enrollment_id
     1170
     1171Review(review_id, review_rating, review_comment, review_date, enrollment_id)
     1172  - Примарен клуч: review_id
     1173  - Кандидат клучеви: review_id
     1174  - Надворешни клучеви: enrollment_id
     1175
     1176Course_Version(course_version_id, version_number, version_creation_date, version_active, course_id)
     1177  - Примарен клуч: course_version_id
     1178  - Кандидат клучеви: course_version_id
     1179  - Надворешни клучеви: course_id
     1180
     1181Course(course_id, course_image_url, course_color, course_difficulty, course_duration_minutes, course_price)
     1182  - Примарен клуч: course_id
     1183  - Кандидат клучеви: course_id
    10951184  - Надворешни клучеви: -
    10961185
    1097 Supplier(supplierId, name, contact_person, phone, email, address)
    1098   - Примарен клуч: supplierId
    1099   - Кандидат клучеви: supplierId
     1186Course_Translate(course_translate_id, course_translate_language, course_title_short, course_title, course_description_short, course_description, course_description_long, course_id)
     1187  - Примарен клуч: course_translate_id
     1188  - Кандидат клучеви: course_translate_id
     1189  - Надворешни клучеви: course_id
     1190
     1191Course_Content(course_content_id, content_position, course_version_id)
     1192  - Примарен клуч: course_content_id
     1193  - Кандидат клучеви: course_content_id
     1194  - Надворешни клучеви: course_version_id
     1195
     1196Course_Content_Translate(course_content_translate_id, content_translate_title, content_translate_language, course_content_id)
     1197  - Примарен клуч: course_content_translate_id
     1198  - Кандидат клучеви: course_content_translate_id
     1199  - Надворешни клучеви: course_content_id
     1200
     1201Course_Lecture(course_lecture_id, lecture_duration_minutes, lecture_position, lecture_content_type, course_content_id)
     1202  - Примарен клуч: course_lecture_id
     1203  - Кандидат клучеви: course_lecture_id
     1204  - Надворешни клучеви: course_content_id
     1205
     1206Course_Lecture_Translate(course_lecture_translate_id, lecture_title, lecture_language, lecture_content_file_name, lecture_description, lecture_content_text, course_lecture_id)
     1207  - Примарен клуч: course_lecture_translate_id
     1208  - Кандидат клучеви: course_lecture_translate_id
     1209  - Надворешни клучеви: course_lecture_id
     1210
     1211User_Course_Progress(user_course_progress_id, progress_completed, progress_completed_at, enrollment_id, course_lecture_id)
     1212  - Примарен клуч: user_course_progress_id
     1213  - Кандидат клучеви: user_course_progress_id
     1214  - Надворешни клучеви: enrollment_id, course_lecture_id
     1215
     1216Tag(tag_id, tag_type)
     1217  - Примарен клуч: tag_id
     1218  - Кандидат клучеви: tag_id
    11001219  - Надворешни клучеви: -
    11011220
    1102 Warehouse(warehouseId, name, location, capacity)
    1103   - Примарен клуч: warehouseId
    1104   - Кандидат клучеви: warehouseId
    1105   - Надворешни клучеви: -
    1106 
    1107 Product(productId, name, description, sku, unit_price, reorder_level, categoryId, supplierId)
    1108   - Примарен клуч: productId
    1109   - Кандидат клучеви: productId, sku
    1110   - Надворешни клучеви: categoryId → Category, supplierId → Supplier
    1111 
    1112 Sale(saleId, date_time, total_amount, userId, customerId, warehouseId)
    1113   - Примарен клуч: saleId
    1114   - Кандидат клучеви: saleId
    1115   - Надворешни клучеви: userId → User, customerId → Customer, warehouseId → Warehouse
    1116 
    1117 PurchaseOrder(poId, order_date, expected_delivery_date, status, supplierId, warehouseId)
    1118   - Примарен клуч: poId
    1119   - Кандидат клучеви: poId
    1120   - Надворешни клучеви: supplierId → Supplier, warehouseId → Warehouse
    1121 
    1122 SaleItem(saleId, productId, quantity, unit_price_at_sale)
    1123   - Примарен клуч: {saleId, productId}
    1124   - Кандидат клучеви: {saleId, productId}
    1125   - Надворешни клучеви: saleId → Sale, productId → Product
    1126 
    1127 PurchaseOrderItem(poId, productId, quantity, unit_cost)
    1128   - Примарен клуч: {poId, productId}
    1129   - Кандидат клучеви: {poId, productId}
    1130   - Надворешни клучеви: poId → PurchaseOrder, productId → Product
    1131 
    1132 WarehouseStock(warehouseId, productId, quantity_on_hand, last_updated)
    1133   - Примарен клуч: {warehouseId, productId}
    1134   - Кандидат клучеви: {warehouseId, productId}
    1135   - Надворешни клучеви: warehouseId → Warehouse, productId → Product
     1221Tag_Translate(tag_translate_id, tag_translate_language, tag_value, tag_id)
     1222  - Примарен клуч: tag_translate_id
     1223  - Кандидат клучеви: tag_translate_id
     1224  - Надворешни клучеви: tag_id
     1225
    11361226}}}
    11371227
    11381228=== 8.2 Дискусија на разликите од моделот во Фаза P2 ===
    11391229
    1140 Преку процесот на нормализација, тргнувајќи од една универзална релација, дојдовме до '''истите 11 релации''' како во концептуалниот модел од Фаза P2. Ова покажува дека:
    1141 
    1142  1. '''Концептуалниот модел беше правилно дизајниран''' - ентитетите и нивните атрибути беа логички групирани.
     1230Преку процесот на нормализација, тргнувајќи од една универзална релација, дојдовме до '''20 релации'''
     1231(17 од функционални зависности + 3 many-to-many junction tables). Споредбата со концептуалниот модел
     1232од Фаза P2 покажува следно:
     1233
     1234==== Релации кои се идентични со P2 ====
     1235
     1236Следниве релации се '''целосно идентични''' со оние од концептуалниот ER модел:
     1237
     1238 1. '''User''' - идентична структура и атрибути
     1239 2. '''Expert''' - идентична структура и атрибути
     1240 3. '''Course''' - идентична структура и атрибути
     1241 4. '''Course_Version''' - идентична структура и атрибути
     1242 5. '''Enrollment''' - идентична структура и атрибути
     1243 6. '''Payment''' - идентична структура и атрибути (one-to-one со Enrollment)
     1244 7. '''Review''' - идентична структура и атрибути (one-to-one со Enrollment)
     1245 8. '''Tag''' - идентична структура и атрибути
     1246 9. '''Course_Translate''' - идентична структура и атрибути
     1247 10. '''Course_Content''' - идентична структура и атрибути
     1248 11. '''Course_Content_Translate''' - идентична структура и атрибути
     1249 12. '''Course_Lecture''' - идентична структура и атрибути
     1250 13. '''Course_Lecture_Translate''' - идентична структура и атрибути
     1251 14. '''Tag_Translate''' - идентична структура и атрибути
     1252 15. '''Verification_Token''' - идентична структура и атрибути
     1253 16. '''Meeting_Reminder''' - идентична структура и атрибути
     1254 17. '''User_Course_Progress''' - идентична структура и атрибути
     1255
     1256==== Many-to-Many релации ====
     1257
     1258 18. '''Expert_Course''' - junction table за many-to-many релација помеѓу Expert и Course
     1259 19. '''Course_Tag''' - junction table за many-to-many релација помеѓу Course и Tag
     1260 20. '''User_Tag''' (User_Favorite_Course_Ids во P2) - junction table за many-to-many релација помеѓу User и Tag/Course
     1261
     1262==== Релација со мултивредносен атрибут ====
     1263
     1264 * '''Course_What_Will_Be_Learned''' - беше дел од Course_Translate во концептуалниот модел, но се издвои во посебна релација во 1NF декомпозицијата поради мултивредносна природа (еден курс има повеќе "what will be learned" ставки).
     1265
     1266==== Клучни наоди ====
     1267
     1268 1. '''Концептуалниот модел беше правилно дизајниран''' - 17 од 17 ентитети од ER моделот соодветствуваат на релациите добиени преку нормализација. Ова покажува дека оригиналниот дизајн ги почитуваше принципите на нормализација уште во концептуалната фаза.
    11431269
    11441270 2. '''Процесот на нормализација го потврди дизајнот''' - секоја декомпозиција базирана на функционалните зависности резултираше со релација која одговара на ентитет од оригиналниот модел.
    11451271
    1146  3. '''Клучот на универзалната релација {saleId, poId, productId}''' беше идентификуван преку анализа на функционалните зависности и класификација лева/десна страна.
    1147 
    1148  4. '''Сите релации се во BCNF''' - нема функционална зависност каде детерминантот не е суперклуч.
    1149 
    1150  5. '''Декомпозицијата е lossless''' - оригиналната информација може да се реконструира.
    1151 
    1152  6. '''Сите функционални зависности се зачувани''' - секоја FD е зачувана во барем една од финалните релации.
     1272 3. '''Клучот на универзалната релација''' - примарниот клуч беше идентификуван како композитен клуч од 8 атрибути: {verification_token_uuid, meeting_reminder_id, user_course_progress_id, expert_id, course_lecture_translate_id, course_content_translate_id, course_translate_id, tag_translate_id, course_what_will_be_learned}. Овој клуч беше идентификуван преку анализа на функционалните зависности и класификација лева/десна страна на атрибутите.
     1273
     1274 4. '''Мултивредносни атрибути''' - концептуалниот модел имаше еден мултивредносен атрибут (course_what_will_be_learned) кој беше правилно идентификуван и декомпониран во 1NF фазата.
     1275
     1276 5. '''Сите релации се во BCNF''' - после анализа на сите 20 релации, потврдено е дека нема функционална зависност каде детерминантот не е суперклуч. Ова значи дека не е потребна дополнителна декомпозиција.
     1277
     1278 6. '''Декомпозицијата е lossless''' - на секој чекор од процесот на нормализација, оригиналната информација може да се реконструира преку JOIN операции на заедничките атрибути (foreign keys).
     1279
     1280 7. '''Сите функционални зависности се зачувани''' - сите 27 функционални зависности (FD1-FD27) се зачувани во соодветните релации, што значи дека ограничувањата можат да се проверуваат без потреба од скапи JOIN операции.
     1281
     1282 8. '''Many-to-many релации''' - junction tables (Expert_Course, Course_Tag, User_Tag) не произлегуваат од функционални зависности, туку од ER моделот и бизнис логиката. Овие релации немаат свои атрибути освен composite primary key од два foreign keys.
     1283
     1284==== Заклучок ====
     1285
     1286Процесот на нормализација '''целосно го потврди дизајнот''' од концептуалната фаза (P2). Не беа потребни
     1287значајни промени - единствената декомпозиција беше издвојувањето на мултивредносниот атрибут course_what_will_be_learned во посебна релација. Ова покажува дека оригиналниот ER модел беше креиран според
     1288принципите на добра база на податоци (минимална редундантност, јасна сепарација на концепти, правилна идентификација на ентитети и релации).
     1289
     1290'''Финалниот релационен модел ќе биде идентичен со моделот од Фаза P2'''.