Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quelle est la bonne façon de stocker ces données dans un schéma MySQL ?

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.