如何处理那些不是真正枚举的枚举因为它们可以改变?

时间:2011-03-11 15:54:51

标签: java database-design web-applications hsqldb

我正在为一个班级的网络应用程序工作。它基本上是一个项目管理系统,类似于Bugzilla的淡化版本,但专为学术环境量身定制。其中一个要求是,对于许多设置(例如可能是硕士项目的项目类型,博士论文等),可配置的可能值列表。因此,会有一个配置或设置页面,您可以在其中更改每个列表中的值,但随后在应用程序的其余部分(如创建项目或任务时),列表中的值将是唯一可供选择的选项。此外,如果您更改其中一个值(例如从主人的论文到硕士论文),那么使用该值的所有记录也应该更改。因此,所有标记为硕士论文的项目现在都将被标记为硕士论文。

我使用HSQLDB存储数据,应用程序全部用Java编写(JDBC,JavaServlets,JSP)。

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

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

任何建议都将不胜感激。我希望设计正确,不仅因为这是一个软件工程类,所以设计很重要,但也因为我可能最终将这个项目扩展到一个硕士项目。

3 个答案:

答案 0 :(得分:2)

这是标准的规范化。

创建一个列表

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

然后将其与其他表格相关联

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

用于将my_other_table查询的值设置为mylist的UI,用于应该进入组合框的值或您选择的任何UI组件。

答案 1 :(得分:2)

每个“enum”应该存储在自己的表中,这样你就可以拥有这个表的外键。

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

答案 2 :(得分:0)

在我的公司,我们有表Dictionary(类,字段,值,描述) - 对于每个类和字段,我们有尽可能多的行,因为它们有允许的值,并且它运行良好。