There are many TEAMS that engage in ACTIVITIES in a many-to-many relationship with TEAM_ACTIVITIES as a joining table. Each ACTIVITY has a set of MARKERS that are used to track each team's progress in the activity Each MARKER belongs to a single ACTIVITY.
Teams choose which activities they are going to be engaged in, then, on a monthly basis, for each activity they are engaged in they report progress against the markers for that activity. This progress is stored as OUTPUTS.
Each OUTPUT belongs to one TEAM and one MARKER and includes a month and a value.
My problem is that I feel there is some redundancy in this structure, namely that the activities in which each team is engaged is modelled by the TEAM_ACTIVITIES table, but also is in the OUTPUTS table, since that joins TEAMS to MARKERS which belong to ACTIVITIES.
That means to keep integrity I'll have to make sure that OUTPUTS only include entries for team-activity pairs that exist in the TEAM_ACTIVITIES table.
The other way to structure this would be to make OUTPUTS belong to TEAM_ACTIVITIES instead of TEAMS but then the redundancy has just shifted since the activity for an output could come through the TEAM_ACTIVITIES table or through the MARKERS table,
Is there any good way to structure this without redundancy, so that I don't have to do extra checking to ensure integrity?