sql >> Databasteknik >  >> RDS >> Mysql

Vad är det rätta sättet att lagra denna data i ett MySQL-schema?

Istället för en enda rad för varje film, använd en attribut-värdetabell. Lägg sedan till ett ytterligare fält till detta som anger användaren, vilket skulle vara 0 för den ursprungliga standarden. Så tabellen ser ut så här:

MovieID UserID  Attribute   Value
1       0       Title       12 Monkeys
1       0       Format      DVD
1       1       Title       Twelve Monkeys

Då skulle en fråga för att få titeln se ut så här:

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'

Vissa databasdesigners gillar också att använda ett AttributeID snarare än en sträng som attributnamn och en separat tabell som mappar attributnamn till ID:n.



  1. SQL Server 2008 Express CONCAT() existerar inte?

  2. mysql datetime jämförelse

  3. SQL Server Error 111:"...måste vara den första satsen i en frågebatch"

  4. Så här korrigerar du "java.sql.SQLFeatureNotSupportedException" när du använder metoden createArrayOf()