Fruit is an attribute of the user (the one fruit they like most, on my reading of this).
so it should be in the user table.
The fruit table should be used for look-ups by populating a drop-down list, and as fruit names are unique, you should be using the fruit as the primary key in this table - ie a one column table. Then populate the drop-down for a data entry form via the fruit table. This leads to simpler queries and no need for a join.
Imagine the question what’s your favorite fruit?
Is the answer 123 or Jaboticaba?
If you use a numeric id for a fruit which has a unique name, you have to join two tables together to get at the fruit. In your suggested fruit table above, you would have to join on the userID, instead of simply reading it from the user table. Also, having a table with multiple instances or orange is no more redundant that having multiple instances of fruitID 123. But adding the id to the fruit table creates redundant, unnecessary data in the table. You’re worrying about the physical size of the table when disk space is sooo cheap it isn’t an issue.
You asked if you were missing something - you are over-normalising the user table by pulling out the fruit and then needing to use userid/fruit to identify it, and it seems under the impression that every table needs a numeric id. For example, in your zip code table, every zip code is unique, but you have added a numeric id, thus forcing a join to get at the actual zip code.
So then you have the question what’s your zipcode (in the uk it’s a post code)?
Is it 12345, an id that you have invented and then have to do a join and use to get at the code itself??? And could confuse with a real zipcode. Or is it 00501? So if the zip code was the primary key in it’s own table and the foreign key in the user table, you don’t need a join to be able to report the user’s zipcode. So queries become simpler, and easier to troubleshoot.
so I’d use this set of tables
users: ID (primary key), Name, Phone_Number, Email_Address, zip_code (foreign key), fruit (foreign key)
fruits_you_like: fruit (primary key)
zip_code: zip_code (primary key) , city, state