Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Qual é a maneira correta de armazenar esses dados em um esquema MySQL?


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.