小编典典

如何为数据库中的(Java)枚举建模(使用SQL92)

sql

大家好,我使用名为“性别”的列为实体建模。在应用程序代码中,性别应该是(Java)枚举类型,具有2个值(MALE和FEMALE)..您将如何对其建模,因为知道作为数据类型的枚举不是通用SQL(语言)的一部分92

数据模型必须具有可移植性,才能被多个DBMS(Mysql,Oracle,Derby)和多个持久性提供程序(JPA,Hibernate,JDBC)使用。我觉得它达到了2个级别:-首先是架构和实体级别(将枚举存储为-
VAR-CHAR或INT)-其次是应用程序代码级别(JDBC不支持枚举,JPA支持,但是这取决于实现方式)

是否有通用解决方案,例如适用于Mysql DBMS?谢谢 !!


阅读 190

收藏
2021-04-28

共1个答案

小编典典

我通常采用以下解决方案,该解决方案提供了完全标准化的数据库架构。

  1. 创建一个专用表来表示您的枚举;例如Colour。该表将包含两列:
    • 一个 ID 柱(主密钥)。通常为auto-incrementing int,smallint或tinyint
    • 一个 名字 列(候选键)。这将是一个varchar其值应与Java枚举相同的值。
  2. 创建一个Java枚举:颜色与Colour数据库中的表相同。
  3. 假设您现在有一个“数据”表,其中包含引用该Colour表的记录,请实现一个用于插入记录的存储过程,该记录采用“颜色字符串”值(如Java枚举所描述);例如

创建过程dbo.InsertRecord @colour varchar(32)AS …

该存储过程将执行必要的字符串到整数的转换,使您的数据表可以通过int外键引用Color表。

同样,您可以在数据表上创建一个视图,该视图将在后台连接到Color表,以将数据的非规范化通道显示回应用程序或最终用户。

存储过程方法的替代方法是在启动时在应用程序中读取并缓存顺序的名称映射。与数据库中Color表的内容相比,这样做的优点是能够验证Java
Color枚举的完整性。

2021-04-28