当前位置: 首页 > 面试题库 >

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

平山
2023-03-14
问题内容

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

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

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


问题答案:

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

  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枚举的完整性。



 类似资料:
  • 问题内容: 除了简单地为每个枚举创建查找表(以Id,代码和名称作为列)之外,是否有更好或更简便的方法将枚举(在C#等编程语言中可用的枚举)存储在SQL Server数据库中,而不是为每个枚举创建查找表(尤其是在存在枚举时)每个表中只有很少的几行)?我发现有一篇文章建议只为所有枚举创建一个查找表,并且有人批评这种方法违反了引用数据的完整性,因此有人批评该方法。如果枚举仅由一个表使用,那么使用一些预定

  • 问题内容: 我要做什么才能完成此任务?另外,可以说我将其更改为: 我该如何使它符合Decodable? EDit 这是我的完整代码(不起作用) 最终编辑 另外,它将如何处理这样的枚举? 问题答案: 这很简单,只需使用或隐式分配的原始值即可。 被编码到并到 要么 被编码到并到 这是一个简单的示例如何使用它:

  • 此处使用的运算符不能用于所使用的值类型。您要么在这里使用了错误的类型,要么使用了错误的运算符

  • 问题内容: Scala没有enumJava所具有的类型安全的。给定一组相关的常数,Scala中代表这些常数的最佳方法是什么? 问题答案: http://www.scala-lang.org/docu/files/api/scala/Enumeration.html 使用范例

  • 问题内容: 当我阅读 Effective Java时 ,作者告诉我,单元素类型是实现单例的最佳方法,因为我们不必考虑复杂的序列化或反射攻击。这意味着我们无法创建使用反射的实例,对吗? 我已经做了一些测试,并在这里上课: 然后我尝试创建一个实例: 如您所知,它不起作用。当我更改关键字来,它的工作原理。我想知道为什么。谢谢。 问题答案: 这是语言内置的。根据Java语言规范(§8.9): 尝试显式实例