问题描述
嗨!
通常,我们需要存储某种应用程序参数或应用程序用户设置。
自然,每个参数都有自己的类型、尺寸等。
我们可以使用一个直表,每个参数都有单独的列,但是如果我们需要添加下一个参数,我们必须更改表 (并为它准备get \ set方法)。
另一种方法是使用EAV表 (实体属性值)。在这种情况下,我们需要自己控制类型和尺寸 (这更危险)。
但是这种方法允许我们使用通用的 \ 重载getter \ setter。
另外,当我们准备setter时,很容易为许多类型的数据制作一个setter。但是吸气剂有点棘手。
我们不能调用具有不同返回类型的重载函数。
我们还可以为每种数据类型准备单独的方法,例如
哪种是存储这种数据的最佳方法?
是否可以使用第一种方法准备没有列名映射的通用方法?
哪种访问方式更灵活、清晰?
通常,我们需要存储某种应用程序参数或应用程序用户设置。
自然,每个参数都有自己的类型、尺寸等。
我们可以使用一个直表,每个参数都有单独的列,但是如果我们需要添加下一个参数,我们必须更改表 (并为它准备get \ set方法)。
另一种方法是使用EAV表 (实体属性值)。在这种情况下,我们需要自己控制类型和尺寸 (这更危险)。
但是这种方法允许我们使用通用的 \ 重载getter \ setter。
另外,当我们准备setter时,很容易为许多类型的数据制作一个setter。但是吸气剂有点棘手。
我们不能调用具有不同返回类型的重载函数。
function get_val(p_param_name in varchar2) return number; function get_val(p_param_name in varchar2) return date; -- too many declarations ....
我们还可以为每种数据类型准备单独的方法,例如
function get_date_val(p_param_name in varchar2) return date; function get_num_val(p_param_name in varchar2) return number;
哪种是存储这种数据的最佳方法?
是否可以使用第一种方法准备没有列名映射的通用方法?
哪种访问方式更灵活、清晰?
专家解答
根据我的经验,每个应用程序都需要某种形式的配置/设置表。虽然理论上你应该有单独的列来强制执行数据类型等,但实际上这太过分了。一个简单的键/值表通常会完成以下工作:
由于这些值很少发生变化,通常由开发团队控制,如果错误,整个应用程序会中断,因此将错误数据类型的通常风险降至最低。
但你确实需要小心。我看到人们陷入的最大陷阱是将其用作任何东西的通用查找表。避免这个!根据需要为新实体创建新表。
我看到的关键错误是在逗号分隔的列表中为几个值使用一个参数。例如:
这使得这些值更难操纵。在这种情况下,您可以:
为每个值创建单独的参数:
或者有简单的亲子关系:
create table app_config ( config_parameter varchar2(100) not null primary key, config_value varchar2(1000) not null );
由于这些值很少发生变化,通常由开发团队控制,如果错误,整个应用程序会中断,因此将错误数据类型的通常风险降至最低。
但你确实需要小心。我看到人们陷入的最大陷阱是将其用作任何东西的通用查找表。避免这个!根据需要为新实体创建新表。
我看到的关键错误是在逗号分隔的列表中为几个值使用一个参数。例如:
insert into app_config values ( 'param', 'val1,val2,val3,...' );
这使得这些值更难操纵。在这种情况下,您可以:
为每个值创建单独的参数:
insert into app_config values ( 'param1', 'val1' ); insert into app_config values ( 'param2', 'val2' ); insert into app_config values ( 'param3', 'val3' ); ...
或者有简单的亲子关系:
create table app_config_parameters (
config_parameter varchar2(100) not null primary key
);
create table app_config_values (
config_parameter varchar2(100) not null
references app_config_parameters ( config_parameter ),
config_value varchar2(1000) not null,
primary key ( config_parameter, config_value )
); 「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




