我正在我的程序中编写一个模块,需要配置要运行的设置。我的客户已要求公司范围内的设置为全球。这意味着设置需要一个中心位置(所有设置都是int
)。
我们确实有一个存储其他数据的数据库,所以我的第一个想法就是在数据库上创建一个表。但这可能涉及一个严格的1行表,其中包含非常特定的预设列或两列表,每行都是设置标识符。
基本上,根据我目前的方法,表格看起来像这样:
Settings Table
-------------------------------------------------------
| setting_1 (int) | setting_2 (int) | setting_3 (int) |
|-----------------|-----------------|-----------------|
| 440 | 7 | 0 |
-------------------------------------------------------
或者像这样:
Settings Table
------------------------------------------
| setting (varchar) | value (int) |
|-------------------|--------------------|
| 'setting_1' | 440 |
|-------------------|--------------------|
| 'setting_2' | 7 |
|-------------------|--------------------|
| 'setting_3' | 0 |
------------------------------------------
虽然数据库肯定能够做到这一点,但在我看来,这似乎不属于数据库的目的。我认为可能有更好的解决方案。
那么,您认为这种方法最好吗?或者有更好的选择吗?
我正在使用Java,但我可以预见到与语言无关的解决方案。
答案 0 :(得分:0)
尽管我一般不喜欢这种方法,但您的第二种方法 - 也称为EVA - 是进行数据库范围设置的方法。
这样,只要有新的值(或属性)添加,就可以使用插入表将行添加到表中。
第一种方法要求每次添加新属性时更改设置表的结构,这不是一个好主意。
EVA方法的缺点是将为所需的每个字段进行数据库访问(除非您希望一次读取所有行),而使用普通表,可以一次访问所有必需字段。这可能是也可能不是问题。
答案 1 :(得分:0)
这里没有单一的事实,所以最好写出一个优点/缺点列表:
选项#1
优点:
缺点:
选项#2
优点:
ALTER TABLE
语句来添加或删除选项;然而,这通常不是一个优势,因为它通常会由管理员执行。缺点:
<强>替代强>
您可以考虑使用配置文件;保持这个文件在多个服务器上保持同步可以使用Puppet,Chef等软件完成。