"The fastest way to do anything is not to do it at all." -- Cary Millsap, Optimizing Oracle Performance.
"A designer knows he has achieved true elegance not when there is nothing left to add, but when there is nothing left to take away." -- Antoine de Saint-Exupéry
The simpler implementation has two tables and three indexes, two unique.
The more complicated implementation has three tables and five indexes, four unique. The index on asso_countries_players.player_name
(which should be a surrogate ID -- what happens if a player's name changes, like if they get married or legally change it, as Chad Ochocinco (nee Johnson) did?) must also be unique to enforce the 0..1 nature of the relationship between players and countries.
If the associative entity isn't required by the data model, then eliminate it. It's generally pretty trivial to transform a 0..1 relationship or 1..n relationship to an n..n relationship:
- Add associative entity (and I'd question the need for a surrogate key there unless the relationship itself had attributes, like a start or end date)
- Populate associative entity with existing data
- Reimplement the foreign key constraints
- Remove superseded foreign key column in child table.