我正在程序中编写一个模块,该模块需要已配置才能运行。我的客户要求这些设置在公司范围内是全局的。这意味着设置需要一个中心位置(所有设置均为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方法的缺点是将对每个必填字段进行数据库访问(除非您想一次读取所有行),而对于普通表,可以一次访问所有必填字段。这可能是问题,也可能不是问题。

10-06 07:29
查看更多