sql >> Base de Datos >  >> RDS >> Mysql

¿Cuál es la forma correcta de almacenar estos datos en un esquema MySQL?

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.