我movie
在MySQL数据库中。一个movie
包含数据的属性,将永远不会改变,如以下几点:
它是表中的一行。
但是,我想根据这些信息为用户提供完全的自定义设置,以防万一他们认为不正确,或者他们只是想以某种方式修改数据的显示方式。我不在乎为什么,我只想给我的用户一个选择,做他们想做的事情。
假设用户#1希望将其标题更改为“ 12只猴子(书架1)”,仅此而已。
假设用户#2想要将DVD更改为“数字复制”。
假设用户#3希望将其标题更改为“十二只猴子”,因为这是替代标题。
等等。
我的问题是,如何存放刚而不需要修改原始数据的一个变化是一个字段只有用户名,?在具有所有字段的单独的相同表中,除一个字段外,其他数据完全相同。还是可以仅将一个更改(例如标题)存储在某个地方,然后再参考movie
其余数据?
设计此方法的正确方法是什么,特别是如果我有1000个用户主要在一个或两个字段上进行自定义数据修改时,该方法是什么?
请使用属性值表,而不是每部电影的一行。然后,在此字段中添加一个用于指定用户的附加字段,该字段将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的单独表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句