0

我们的应用程序有许多配置指令。诸如“是否启用了多种语言?”之类的东西。“应该使用哪个 CSS 模板?” “每页应显示多少项?” .

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

我的想法是用基于 MySQL 的键值存储替换表(我们使用共享主机,配置选项很少,所以我们不能使用 NoSQL)。某些值可能取决于语言环境或其他变量,但我认为它可以通过诸如回退之类的方法来解决(查找以“lang:fr”开头的键,如果找不到,请尝试以“lang:default”开头的键(这将时刻准备着)。

约束只能在 PHP 中使用具体的设置类进行检查,但不会进行数据库检查。

  1. 是否有任何现成的解决方案(最好与 Zend Framework 配合使用)。
  2. 这个解决方案的缺陷是什么(除了显而易见的——我不能一次获取整个“行”或一次获取多行——这不是问题)
  3. [你使用过|你会使用] 类似的解决方案还是完全不同的解决方案?
4

3 回答 3

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

当然,您随后需要获取字符串值并在代码中对其进行操作,以将其视为整数、浮点数、字符串等。

也许请注意最干净的做事方式,但已经多次看到这种方法。

于 2012-08-01T14:43:53.480 回答
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 的序列化参数集。

如果需要,自动加载列允许您的系统跳过很少使用的设置。

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

于 2012-08-01T14:49:33.987 回答
0

将您的键/值存储在 php 数组中,对其进行序列化,然后将结果字符串存储在数据库表的文本列中。很大的灵活性和易于实施。唯一真正的缺点是您无法查询单个属性。

于 2012-08-01T14:57:17.200 回答