2011-11-07 64 views
4

我有一个设计困境在我手中,我希望你们可以帮我解决这个问题。JPA查询表设计

问题: 我有我的代码和值属性的应用程序每次约15查找表。我想知道创建这些查找表的最佳设计方法是什么。

我有几个解决方案,在我的脑海

  1. 有一个抽象的超类(比如BaseLookupTable)与代码属性,然后去创造延长了15个专门查找类这个班。或
  2. 为15个查找表中的每一个创建枚举类型。

如果你们可以帮我挑选一个解决方案(即使是我没有提到的解决方案)以及做这件事的理由,我们将不胜感激。

干杯, 萨曼斯

回答

0

我不认为一个共同的JPA基类有多大用处。假设你没有建立一个公共的键/值接口的模型,那么为什么不把具体的语义编码到查找表的列名中,例如, role_name,status_code等?

不确定您是否也在使用DB ENUM,例如MySQL ENUMs。我假设这是为下一段(它是MySQL的具体)。其他DBMS如PostgreSQL具有非冗余的ENUM,因此以下可能并不适用于您的情况:

无论如何,MySQL ENUMs无法应用于任何情况。如果查找值是单值的,并且基本上只从一个表/实体引用,则应该使用MySQL ENUM。我的策略是添加单独的查找表,如果值从多个其他表引用或查找表需要多个属性。请注意,在数据库中使用相同的ENUM定义会增加冗余。使用MySQL ENUM可以为你节省一张表,一个连接和一些关系。请记住,DB ENUM的值应尽可能静态。如果他们需要更改,请再次使用查找表。

这不是一个简单的话题,我不得不分享我对这个话题的看法,尽管这包括了MySQL的具体细节。

1

我会去选择1,因为枚举在你的代码中是固定的。如果你想添加一个选项到你的查找表中,你只需要将它插入到你的数据库中。用枚举你需要重新编译你的应用程序。