繁体   English   中英

如何处理不是真正的枚举(因为可以更改的枚举)?

[英]How to deal with enums that aren't really enums because they can be changed?

我正在为一个班级的网络应用程序工作。 它基本上是一个项目管理系统,类似于经过简化的Bugzilla版本,但专门针对学术环境而设计。 要求之一是,对于许多设置(例如可以是硕士项目的项目类型,博士学位论文等),可能值的列表是可配置的。 因此,会有一个配置或设置页面,您可以在其中更改每个列表中的值,但随后在应用程序的其余部分(如创建项目或任务时),列表中的值将是唯一可供选择的选项。 同样,如果您更改了其中一个值(例如,从硕士学位论文更改为硕士学位论文),则使用该值的所有记录也应进行更改。 因此,所有标记为硕士论文的项目现在都将标记为硕士论文。

我正在使用HSQLDB来存储数据,并且应用程序都是用Java(JDBC,JavaServlets,JSP)编写的。

我很难从设计的角度弄清楚如何处理此要求。 首先,如何将这些列表存储在数据库中? 每个列表都是自己的表吗? 将每个列表作为一个表中的一列似乎是错误的(这不违反规范化规则吗?)。 我对数据库设计不是很熟悉,但是谷歌搜索并没有显示出一个好的解决方案。

其次,如何在代码中处理这些列表? 我一直在考虑在关联的类中使用静态变量(某种形式的集合),因为这些设置是全局的,而不是特定于一个用户或项目的。 不过,通常认为这不是好的设计。

任何建议将不胜感激。 我想使设计正确,不仅因为这是一个软件工程课程,所以设计很重要,还因为我最终可能将此项目扩展为硕士项目。

这是标准归一化。

创建一个列表表

mylist
---------
option_id 
option_name

然后将其适当地关联到另一个表

my_other_table
--------------
attributes...
option_id

用于将my_other_table查询的值设置为mylist的UI,以获取应进入组合框或所选的任何UI组件的值。

每个“枚举”应存储在其自己的表中,以便您可以对此表使用外键。

您可以将每个“枚举”的所有可能值存储在高速缓存中,以避免每次需要选项列表时都进入数据库,但请注意不要提出陈旧的数据。 由于条目数应该很小,因此在您遇到真正的问题之前,我不会在意性能。

在我的公司中,我们有表Dictionary(类,字段,值,描述)-对于每个类和字段,我们都有尽可能多的行,只要有允许的值,它就可以很好地工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM