您好,我正在使用名为“性别”的列对实体进行建模。在应用程序代码中,性别应该是一个(Java)枚举类型,有 2 个值(男性和女性)..知道作为数据类型的枚举不是通用 SQL(语言)92 的一部分,您将如何建模它。
数据模型必须是可移植的,以便由多个 DBMS(Mysql、Oracle、Derby)和多个持久性提供程序(JPA、Hibernate、JDBC)使用。
我觉得,它有两个层次:
- 首先是模式和实体的级别(将枚举存储为 -VAR-CHAR 或 INT)
- 其次是应用程序代码的级别(JDBC 不支持枚举,JPA 支持,但这取决于实现)
是否有一个通用的解决方案,例如适用于 Mysql DBMS?
谢谢 !!
我通常采用以下解决方案,它提供了完全规范化的数据库模式。
- Create a dedicated table to represent your enumeration; e.g.
Colour
. The table will have two columns:
- An ID列(主键)。通常是自动递增
int
、小整数或tinyint
.
- A name列(候选键)。这将是一个
varchar
其值应与 Java 枚举相同。
- 创建一个 Java 枚举:与颜色具有相同值的颜色
Colour
数据库中的表。
-
假设您现在有一个“数据”表,其中包含引用Colour
表,实现一个用于插入记录的存储过程,该过程采用 Color String 值(如 Java 枚举所描述);例如
创建过程 dbo.InsertRecord
@颜色varchar(32)
作为
...
存储过程将执行必要的字符串到整数的转换,允许您的数据表通过 int 外键引用颜色表。
同样,您可以在数据表上创建一个视图,该视图将在幕后连接到颜色表,以向应用程序或最终用户呈现数据的非规范化通道。
存储过程方法的替代方法是在启动时读取并缓存应用程序中的序号名称映射。这样做的优点是能够验证 Java Color 枚举与数据库中 Color 表的内容的完整性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)