我想知道为网站保存大量用户偏好的最佳策略是什么。大多数情况下的默认值,如默认时区,默认文本大小等。为每个设置创建一个单独的列听起来不太实际。我目前唯一能想到的方法是在users
表中为首选项添加一个单列,并将所有设置放在那里。
例如,我只能在一列中使用这样的格式:timezone:GMT;text_size:12;default_value1:something;default_value2:FALSE
。然后当在PHP中抓取它时,我会为登录用户选择此列并对结果进行爆炸,设置$ _SESSION ['settings'] ['setting_key'] =“setting_value”。
有更明智的方法可以做到这一点,还是我已经朝着正确的方向前进了?当然,唯一的缺点是无法搜索每个特定的设置,因为所有内容都集中在一起。
答案 0 :(得分:4)
恕我直言,serialize只是完美的意思。
如果您想要搜索它,您可能希望最终将它们分开。 另一方面,您可能希望采用完全不同的方法,而不是存储在每列设置的大表中,您可以创建一种类型的表:
CREATE TABLE settings (user_id INT, setting VARCHAR, value VARCHAR)
并存储类似的设置。然后,您不受添加/删除列的限制。
另一种方法(进一步加快可能的设置查找)将创建多个表:
CREATE TABLE settings (id INT, setting VARCHAR)
CREATE TABLE settings_values (user_id INT, setting_id INT, value VARCHAR)
考虑到setting_id
是settings.id
的外键并假设您有一些users
表具有用户ID,其中user_id
是两个示例中的外键
答案 1 :(得分:2)
我会选择“每个偏好列”选项;毕竟,你的程序必须存储首选项然后检索它们,所以它不会像你的程序不知道如何处理的偏好一样浮动。
我在我编写和维护的数据库程序中有一个类似的系统,其中每个用户每个屏幕可能保存十个首选项。在此基础上存储会降低复杂性。
您考虑存储多少偏好?我怀疑它会超过十个。
如果您要一次性检索所有首选项,然后立即存储所有,那么可以使用连接字符串方法,但通常我我不建议这样做,因为它使个人更难以访问偏好。