I need to store multiple email addresses for each user in MySQL and have it normalized. Emails can be for work, personal, etc even multiple work emails or any other can be linke
That's how I'd do it. I think your design is fine.
Yep, your design is fine. It represents a common, normalized email address data model.
yes, you can also use composite key (using primary or unique index) in the contact_emails table using contact_id and email_type_id. This way one contact will have only one email of a certain type. without the index, a user can save 1+ emails from same email type.