En lugar de una sola fila para cada película, utilice una tabla de valores de atributos. Luego agregue un campo adicional a esto que especifique el usuario, que sería 0
para el valor predeterminado original. Entonces la tabla se ve así:
MovieID UserID Attribute Value
1 0 Title 12 Monkeys
1 0 Format DVD
1 1 Title Twelve Monkeys
Luego, una consulta para obtener el título se vería así:
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'
A algunos diseñadores de bases de datos también les gusta usar un AttributeID
en lugar de una cadena como nombre de atributo, y una tabla separada que asigna nombres de atributo a ID.