如何存储每个用户的参数 - 寻求的意见

时间:2009-04-13 20:46:30

标签: web-applications parameters

对不起,这是一个非常开放的问题!

我希望我的网站上的用户能够修改他们用于配置文件的模板的html / css参数 - 有点像myspace(真的,非常抱歉使用它作为示例......)。

•用户可以选择“主题”库 •某些主题可以自定义,有些则不能 •主题不一定具有相同的可自定义参数

我想为每个用户存储他们选择自定义的每个主题的自定义变量。什么是最好的格式?

DB可以

--------------------------------------
user id | theme id | custom parameters
--------------------------------------

我怎么能存储像这样的东西 bg color =#34ed55 bg image = bg.jpg font = comic sans color = 554323 css = h1 {        字体大小:1em的;        颜色:蓝色;        }       .customCss {         填充:10px的;       }

3 个答案:

答案 0 :(得分:2)

如果参数的类型都相同(例如字符串值),则可以使用单独的参数表来映射表示用户主题属性的键/值对。

user_theme
    user_id
    theme_id

user_theme_parameters
    user_id
    key
    value

表格可能像:

user_id  key      value
1        bgcolor  #000000
1        bgimage  bg.jpg
2        font     Arial

如果主题共享公共密钥,您可以将参数密钥分解为另一个表,并在此处通过ID引用它们,而不是复制密钥字符串(例如“bgcolor”)。

答案 1 :(得分:1)

您可以使用以下表格:

custom_param: 
    param_id
    theme_id
    param_name
user_params: 
    user_id
    param_id
    value
user_settings:
    user_id
    ...        -- whatever other user settings you store
    theme_id   -- for current theme

使用此方法从级联删除中获得一些好的行为。如果参数不再存在,那么您只需将其从custom_param中删除,然后将从用户的设置中删除。如果要删除整个主题,它将级联到custom_param并删除所有相关参数,然后删除所有相关的user_params。

只需确保设置你的user_settings表,这样当主题被删除时,它会将theme_id设置为某个默认主题,并且不会删除该行!

答案 2 :(得分:0)

您可以创建一个类来包含自定义参数,并在表的CustomParameters字段中存储该类的序列化版本。在我的例子中,我扩展了现有的Users类,以便在我的UserCustomParameters类中获取和设置值。

关于这一点的好处是,一旦它到位,我就不必修改我的数据库了。

当然,您必须决定是否需要在表中使用自己的字段。对我来说,简单的用户设置,比如控制外观的设置,不需要自己的字段。

正确地序列化和反序列化该类是最耗时的部分。