我只是想知道为我的Web应用程序存储用户特定设置的最佳方法是什么?只是偏好用户可能有.我想到了两个选择:
用户表 - 我将为我的用户提供一个表.创建一个名为"preferences"的列,并将序列化数据存储在key => value对中
设置表 - 使用user_id列创建一个名为settings的单独表.以相同的方式保存设置
任何输入将不胜感激.谢谢 :)!
-
编辑:只是添加,如果我没有序列化/ json或任何数据放入数据,我必须有一个列为每个设置.
Sam*_*tch 24
对于总是为每个用户设置的任何内容,您应该倾向于将其保留在Users
表中,按照通常的规范化.至于可选配置,我倾向于喜欢下面的表结构:
TABLE Users:
id INT AI
name VARCHAR
...
TABLE User_Settings
user_id INT PK,FK
name VARCHAR PK
type BOOL
value_int INT NULL
value_str VARCHAR NULL
Run Code Online (Sandbox Code Playgroud)
Where User_Settings.type
指定是否应引用整数或字符串字段.
即:
INSERT INTO Users (id, name) VALUES (1, 'Sammitch');
INSERT INTO User_Settings (user_id, name, type, value_int) VALUES (1, 'level', 1, 75);
INSERT INTO User_Settings (user_id, name, type, value_str) VALUES (1, 'lang', 0, 'en');
Run Code Online (Sandbox Code Playgroud)
对于INSERT/UPDATE问题:
INSERT INTO User_Settings (user_id, name, type, value_str) VALUES (1, 'lang', 0, 'fr')
ON DUPLICATE KEY UPDATE value_str='fr';
Run Code Online (Sandbox Code Playgroud)
此外,正如大多数其他人所说,序列化和存储首选项并不是一个特别好的主意,因为:
在这段时间里,我与人们讨论了如何最好地存储可选设置,以及上面定义的一般表结构.
虽然那个表结构并不完全糟糕,但它也不是很好.它试图充分利用糟糕的情况.只要您可以适应这些设置,可选设置的序列化就可以工作:
然后,您可以考虑optional_settings
在Users
表中添加一个包含设置的序列化[eg:JSON]形式的字段.你做了以上的交易,但这是一种更简单的方法,你可以存储更复杂的设置.
此外,如果您使用类似TEXT
存储的LOB类型,则数据不一定存储在"行中",至少在MySQL中.
无论如何,由您决定应用程序的要求和约束是什么,并根据该信息做出最佳选择.
归档时间: |
|
查看次数: |
11510 次 |
最近记录: |