Em vez de uma única linha para cada filme, use uma tabela de valor de atributo. Em seguida, adicione um campo adicional a isso que especifica o usuário, que seria
0
para o padrão original. Então a tabela fica assim:MovieID UserID Attribute Value
1 0 Title 12 Monkeys
1 0 Format DVD
1 1 Title Twelve Monkeys
Em seguida, uma consulta para obter o título ficaria assim:
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'
Alguns designers de banco de dados também gostam de usar um
AttributeID
em vez de uma string como o nome do atributo e uma tabela separada que mapeia nomes de atributos para IDs.