我正在创建一个模块化系统,其中每个模块与其他模块分开。 我想将模块配置数据存储在数据库中,但我不知道最佳结构。
第一
key_____|______value (primary key is `key`)
option1 | 1
option2 | abcd
option3 | bla-bla-bla
我可以轻松获取设置,但如果我想更新某些设置,我需要使用CASE构建硬(?)SQL查询:
UPDATE settings SET value = CASE
WHEN key = option1 THEN 1;
WHEN key = option2 THEN abcd;
…
END
WHERE key IN (option1, option2, …)
如果有一个更好的变体可以在一个查询中更新许多行(我将只使用MySQLi和InnoDB),这将是很棒的。
第二
module_____|_____settings
news | a:3:{s:7:"option1";i:1;s:7:"option2";s:4:"abcd";s:7:"option3";s:11:"bla-bla-bla";}
这样,我将使用设置序列化数组并将其放入数据库中。我想在.php文件中缓存未序列化的数据。 但如果我有大设置数组,我的序列化字符串将非常大。
第三
option1 | option2 | option3
1 | abcd |bla-bla-bla
我将为一个选项键设置一列,但我认为创建一个表来存储一行是不必要的。
哪种变体最好? 你能建议自己的方法存储配置吗? 谢谢!
答案 0 :(得分:2)
如果您已设置在数据库中存储配置数据,我将始终使用第一个选项。
它允许您轻松添加和更新配置值,而不会影响系统的其他任何部分。你只是略微考虑更新值的复杂性。而不是尝试将所有内容包装在单个更新中,而是为每个密钥编写单独的更新:
update settings set value = 1 where key = option1;
update settings set value = 'abcd' where key = option2;
选项二可能是第二个,但我真的很讨厌在数据库中存储一大串序列化数据。如果这是你要去的方式,考虑将其存储在配置文件中。
我曾经使用过第三种选择的项目,这是迄今为止我最不喜欢的项目。
,无论何时添加/删除配置值,都必须添加/删除列。