2012-08-01 105 views
0

我们的应用程序有许多配置指令。诸如“是否启用了多种语言?”“哪个CSS模板应该使用?” “”每页应显示多少项目?“将配置保存到数据库 - 键值存储

我们需要在DB中存储配置指令。目前我们有配置的每个“区域”的表,并且该表只有一行包含列中的值。这种方法允许我们对这些值施加约束 - 让它成为ENUM,INT,VARCHAR等等。但是当我们需要添加新的配置指令时,它是巨大的PITA--我们需要更新和重新部署数据库模式。它也污染了许多表格的setup_something表空间。

我的想法是用基于MySQL的键值存储替换表(我们使用带有小配置选项的共享主机,所以我们不能使用NoSQL)。其中一些值可能依赖于语言环境或其他变量,但我认为它可以通过类似于后备(类似于“lang:fr”开头的键来解决,如果没有找到,试着用“lang:default”开头(这会总是准备好)。

约束只会用具体的设置类进行检查在PHP,但不会有DB检查。

  1. 是否对此有任何现成的解决方案(prefferably与运作良好Zend Framework)
  2. 这个解决方案的秘诀是什么(除非明显 - 我不能一次获取整个“行”或同时获取多行 - 这不是问题)
  3. [你使用过|你会使用]类似的解决方案还是完全不同的东西?
+0

为什么不使用带有键/值对的一个表?如果是按用户配置,则始终可以使用用户/键/值作为表数据。 – Matt 2012-08-01 14:39:05

+1

如果您不需要从Web应用程序(例如管理界面)写入/更改参数,我会在文本文件中使用某些内容。像yaml或ini风格的配置。现有的解决方案/ PHP库无法解决这个问题。 – bcelary 2012-08-01 14:40:16

+0

这是我的第一个想法。但是我想先将众包体验:)可能会有一些不可预见的陷阱;) – 2012-08-01 14:41:43

回答

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 

当然,那么你就需要采取的字符串值和操作它在你的代码把它当作一个整数,浮点,字符串等

也许注意清洁做事情的方式,但已经看到这种做法多次。

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的序列化参数集。

自动载入列允许您的系统在需要时跳过少量使用的设置。

这工作得很好,并提供了很大的灵活性。

0

将您的键/值存储在php数组中,将其序列化并将结果字符串存储在数据库表的文本列中。很多灵活性和易于实施。唯一不好的一面是你无法查询单个属性。

+0

这不是一个选项,选项需要可读来自SQL。 – 2012-08-02 07:01:03