Problem 2: SELECT H.grade, COUNT(*) FROM Highschooler H WHERE H.name = 'Alison' GROUP BY H.grade ORDER BY H.grade ; Problem 3: ID --> Name, Grade ClubPresID --> ClubName ClubName --> ClubPresID It is not that case that ClubPresID --> ID because a club has several members. You can't identify an individual just by know the president of the club to which they belong. Problem 4: Many possibilities here... Here is one possible set of classes (or tables). You do need two different kinds of associations member-of and president +----------------+ +----------------+ | | | | | Highschooler | 1.* 0.* | Club | | ID +-----------------+ ClubName | | Name | member-of | ClubPresID | | Grade | | | | | 1.1 0.1 | | | +-----------------+ | | | president-of | | +----------------+ +----------------+ It is also possible to have a ClubPresident class (table) which has associations with HighSchooler and Club.