Kac*_*per 1 java database postgresql
我有一个数据库,用于在大学进行作业的招聘广告网络应用程序.我在数据库中有很多枚举值,例如城市名称,广告类别或语言列表.部分数据库:

我的目的是阻止用户通过输入发送并创建一些无效数据,例如我们希望"LA","LA"和"洛杉矶"等值由city表中的一个ID表示.我还认为将它存储在数据库表中是个好主意,因为使用给定的值集,我可以将它们视为标记,这样可以改善搜索过程.此外,还可以轻松扩展这些值,例如将新语言添加到列表中.
不幸的教授说这不是一个最佳解决方案,所以我的问题是在上述情况下存储易于扩展的枚举值列表的最佳方法是什么?
我正在使用PostgreSQL,应用程序将使用在Glassfish上运行的Java EE构建.
虽然从纯粹的架构角度看这似乎是有意义的,但我会将其归类为数据库设计反模式.从根本上说,这是对枚举的不恰当使用.您明显的目标是通过强制用户从正确值列表中进行选择来防止用户输入错误值.虽然高贵,但由于以下原因,您的目标最终存在缺陷:
保持地球上每个城市的准确清单超出了DBA的范围.城市比你想象的更加规律,没有简单的综合清单可供你复制.
由于您无法维护全面的列表,因此您和/或您的应用程序将需要一种机制来输入新值.这将破坏您保证正确价值的目标.
这是数据库模式的过度规范化.你真的不想只是为了确定单个信息字段的值来进行复杂的连接.
替代解决方案是维护已知良好名称的列表,并使用自动完成来建议已知的正确值,但允许您的用户输入不在列表中的新值.不要将城市存储为枚举,而是将其直接存储在其余的逻辑分组数据中.