| 92 | 92 | USERS(user_id, username, email, user_name, surname, password, user_created_at, user_updated_at) → simple primary key user_id, so it satisfies 2NF. |
| 93 | 93 | STORY(story_id, mature_content, short_description, image, story_content, user_id, story_created_at, story_updated_at) → simple primary key story_id, so it satisfies 2NF. |
| 114 | | We checked all FDs where the left side is a primary key, so we can skip those. We only need to check: |
| 115 | | FD6: {story_id, chapter_number} → chapter_id → here we can see that there is a UNIQUE constraint on {story_id, chapter_number}, which tells us that it is also a superkey. |
| 116 | | After this we can safely say that the schema satisfies 3NF. |
| | 114 | We analyze each relation obtained from the 2NF decomposition for transitive dependencies. |
| | 115 | |
| | 116 | USERS(user_id, username, email, ...) — FD2: username → user_id and FD3: email → user_id exist, but username and email are both candidate keys, not non-prime attributes. No transitive dependency. |
| | 117 | STORY(story_id, ..., user_id, ...) — user_id is a non-prime attribute, but within this relation user_id does not determine any other attribute. No transitive dependency. |
| | 118 | CHAPTER(chapter_id, ..., story_id, ...) — story_id is a non-prime attribute, but within this relation story_id does not determine any other attribute. No transitive dependency. |
| | 119 | GENRE(genre_id, genre_name) — both attributes are candidate keys. No transitive dependency. |
| | 120 | READING_LIST(list_id, ..., user_id, ...) — user_id is a non-prime attribute, but within this relation user_id does not determine any other attribute. No transitive dependency. |
| | 121 | NOTIFICATION, AI_SUGGESTION, COMMENT — simple primary keys, no non-prime attribute determines another. No transitive dependencies. |
| | 122 | All remaining tables — no non-prime attributes at all, or single non-prime attribute depending on the full composite key. No transitive dependencies. |
| | 123 | |
| | 124 | Since no transitive dependencies were found in any relation, all relations already satisfy 3NF. |
| | 125 | === 3NF Decomposition |
| | 126 | Since no transitive dependencies were identified in the 3NF Check, no decomposition is required. |