Ideally, the Primary Key implies every column. A -> B.
The Violation: You have a chain reaction. "Student ID" implies "Zip Code". And "Zip Code" implies "City".
Effectively: Student -> Zip -> City.
The Student doesn't directly determine the City; the Zip Code does. Including "City" in the Student table is like writing "Paris" next to every single person who lives in "75001".
The Fix: Cut the chain.
Table 1: Student -> Zip.
Table 2: Zip -> City.
Now "Paris" is written only once in Table 2.
This stops daisy-chains of data. If you change a generic Zip Code's city, you shouldn't have to update it in 5,000 student records.
Student -> Zip Code -> City. This is a chain. Break it! Table 1: (Student, Zip). Table 2: (Zip, City). Now, City is stored only once per Zip.
"Transitive dependency must be eliminated for which Normal Form?"
3NF.