映画ごとに1行ではなく、属性値テーブルを使用します。次に、ユーザーを指定するフィールドをこれに追加します。これは0
になります。 元のデフォルトの場合。したがって、テーブルは次のようになります。
MovieID UserID Attribute Value
1 0 Title 12 Monkeys
1 0 Format DVD
1 1 Title Twelve Monkeys
次に、タイトルを取得するためのクエリは次のようになります。
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'
一部のデータベース設計者は、AttributeID
を使用することも好みます。 属性名としての文字列ではなく、属性名をIDにマップする別のテーブル。