1

我想知道为网站保存大量用户偏好的最佳策略是什么。主要是默认值,例如默认时区、默认文本大小等。为每个设置单独创建一列听起来不切实际。我目前能想到的唯一方法是在表中添加一个单列users用于首选项,并将所有设置放在那里。

例如,我可以只在一列中使用这样的格式:timezone:GMT;text_size:12;default_value1:something;default_value2:FALSE. 然后在 PHP 中抓取它时,我会为登录用户选择此列并对结果进行分解,设置 $_SESSION['settings']['setting_key'] = "setting_value"。

有没有更聪明的方法来做到这一点,或者我已经在正确的方向?当然,唯一的缺点是无法搜索每个特定设置,因为所有内容都集中在一起。

4

2 回答 2

4

恕我直言,这就是序列化的完美含义。

如果您希望它可搜索,您可能希望最终将它们分开。另一方面,您可能希望采用完全不同的方法,而不是存储在一个按列设置的大表中,您可以创建一个表:

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在两个示例中都是外键。

于 2012-10-25T01:15:12.747 回答
2

我会选择“按偏好列”选项;毕竟,您的程序必须存储首选项然后检索它们,因此不会出现您的程序不知道如何处理的首选项。

我在我编写和维护的数据库程序中有一个类似的系统,其中每个用户每个屏幕可能保存十个首选项。在此基础上进行存储降低了复杂性。

您考虑存储多少个偏好?我怀疑它会超过十个。

如果您要一次性检索所有首选项,然后一次存储它们,那么可以使用串联字符串方法,但通常我不建议这样做,因为它会使访问首选项变得更加困难个人基础。

于 2012-10-25T06:33:11.023 回答