我正在程序中编写一个模块,该模块需要已配置才能运行。我的客户要求这些设置在公司范围内是全局的。这意味着设置需要一个中心位置(所有设置均为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,但是可以预见到与语言无关的解决方案。
最佳答案
尽管我通常不喜欢这种方法,但第二种方法(也称为EVA)是数据库范围设置的一种方法。
这样,每当要添加新值(或属性)时,只需使用插入表将行添加到表中即可。
第一种方法要求每次添加新属性时都要更改设置表的结构,这不是一个好主意。
EVA方法的缺点是将对每个必填字段进行数据库访问(除非您想一次读取所有行),而对于普通表,可以一次访问所有必填字段。这可能是问题,也可能不是问题。