ERD via Chen's notation: How do I organize multiple 'last done' entries?
First, 'Friend' is probably not a different entity but just a relationship from 'User' to 'User' but your case may be special, I don't know. So about "if I add a friendID, should I have it as a derived key from user", assuming a friend is just another user - yes.

Additional info like 'last voice chat' &amp; 'last im' shouldn't be part of a composite attribute, each 'last ' is meaningful by itself and a composite attribute doesn't help. If you want to know when user AAA lastly called anybody? then such info should be attributes of 'User', but if you want to know when user AAA lastly called user BBB? then such info should be attributes of the relationship between users AAA &amp; BBB.

The type of relationship probably should be a simple attribute (enumerated) but it depends. If a friendship could be both silver &amp; gold then it should be a composite attribute of boolean isSilver, isGold etc. But if is only silver or gold (or maybe normal) but only one of them, it should be a simple enumerated attribute.

Lastly, you should consider the different ways of how to define friendships, you probably want to read more about it in questions like these:


https://stackoverflow.com/questions/3009190/mysql-friends-table
https://stackoverflow.com/questions/6618701/storing-friends-in-database-for-social-network
https://stackoverflow.com/questions/3120591/mysql-friends-table-structure-help


Good Luck!