我们的应用程序有许多配置指令。像“这样的东西启用了多种语言?”或“应该使用哪个CSS模板?”或“每页应显示多少项?”。
我们需要将配置指令存储在DB中。目前,我们为配置的每个“区域”都有表格,而该表格只包含一行,其中包含列中的值。这种方法允许我们对值进行约束 - 让它为ENUM,INT,VARCHAR等。但是当我们需要添加新的config指令时,它是巨大的PITA - 我们需要更新和重新部署DB模式。它还会使用许多setup_something
表来污染表空间。
我的想法是用基于MySQL的键值存储替换表(我们使用带有少量配置选项的共享主机,因此我们不能使用NoSQL)。一些值可能依赖于语言环境或其他变量,但我认为它可以通过回退来解决(找到键以“lang:fr”开头,如果找不到,请尝试以“lang:default”开头(这将是随时准备好。)
仅使用具体的安装类在PHP中检查约束,但不会进行数据库检查。
答案 0 :(得分:2)
你可以简单地拥有一个包含所有配置设置的MySQL表。也许是这样的:
config_id (INT autoincrement)
config_group (VARCHAR) this gives you something to group your configuration setting with
config_key (VARCHAR) this would be the key name by which you would reference the value
data_type (VARCHAR) you can use this to tell your application how you want to treat this data within the application (i.e. treat it as integer, float, string, etc.)
value (VARCHAR) the value
当然,您需要获取字符串值并在代码中对其进行操作,以将其视为整数,浮点数,字符串等。
也许注意最干净的做事方式,但已经看过这种做法多次了。
答案 1 :(得分:2)
Wordpress系统(当然使用MySQL)有一个wp_options表。它包含以下列:
option_id (autoincrement pk)
blog_id (parameter grouping number)
option_name (text of option name)
option_value (text of option value)
autoload ('yes' or 'no')
option_value可以是简单数字(0,1,42),也可以是需要的文本字符串。一些option_value项是可解析的类JSON序列化参数集。
自动加载列允许您的系统在需要时跳过很少使用的设置。
这非常有效并且提供了很大的灵活性。
答案 2 :(得分:0)
将您的键/值存储在php数组中,对其进行序列化,然后将结果字符串存储在数据库表的文本列中。灵活性高,易于实施。唯一真正的缺点是你不能查询个别属性。