Au lieu d'une seule ligne pour chaque film, utilisez une table attribut-valeur. Ajoutez ensuite un champ supplémentaire à celui-ci qui spécifie l'utilisateur, qui serait 0
pour la valeur par défaut d'origine. Le tableau ressemble donc à :
MovieID UserID Attribute Value
1 0 Title 12 Monkeys
1 0 Format DVD
1 1 Title Twelve Monkeys
Ensuite, une requête pour obtenir le titre ressemblerait à :
SELECT MovieID, IFNULL(my.Value, default.Value) AS title
FROM movies AS default
LEFT JOIN movies AS my ON default.MovieID = my.MovieID AND my.Attribute = 'Title' AND my.userID = @user
WHERE default.UserID = 0 AND default.Attribute = 'Title'
Certains concepteurs de bases de données aiment également utiliser un AttributeID
plutôt qu'une chaîne comme nom d'attribut, et une table séparée qui mappe les noms d'attribut aux ID.