如果您想创建类似于带有值的类型驱动选择的内容:
在Java中保存这个对象的最好方法是什么(以后用jpa持久化)
我还想稍后对此进行查询以获取例如平均分数(如何处理 NA 值也是需要考虑的事情)。
不知道如何解决这个问题,所以建议会更受欢迎。
如果您想创建类似于带有值的类型驱动选择的内容:
在Java中保存这个对象的最好方法是什么(以后用jpa持久化)
我还想稍后对此进行查询以获取例如平均分数(如何处理 NA 值也是需要考虑的事情)。
不知道如何解决这个问题,所以建议会更受欢迎。
如果您的值只是数字加 N/A,那么您可以按照 Perception 和 Gavin Xiong 的建议进行操作,并将其作为 NUMBER 列存储在数据库中。我会让列可以为空,并使用 DBNULL 来表示 N/A,正如 Perception 所建议的那样,而不是使用魔法值(甚至是像 -1 这样的“标准”值)。他们都没有解决如何在 Java 代码中表示这一点,但我认为 Java 中的 null 在大多数情况下是到数据库中 DBNULL 的更自然映射,所以我将其表示为整数(对象)而不是 int (原始)带有 null == DBNULL == N/A,除非有理由不这样做。
您自己提出了如何处理 N/A 值的公式(例如 AVERAGE)的边缘情况,并且您需要在这些情况下定义您想要的行为以获得最终答案。您对如何存储这些值的决定也会影响您的公式查询的复杂程度;如果按照 Gavin 建议的方式将值存储为 -1,那么您肯定必须编写一个带有 WHERE 子句的查询,以从平均值中排除这些行(如果这是您想要的行为),而您可能会得到一些如果您将列设为 NULLABLE 并将 DBNULL 存储为 N/A 的值,则免费。
注意:在将 N/A 映射到 DBNULL 之前,您应该非常确定除了 N/A 之外不会有任何非数字值。如果您认为将来很有可能会有其他非数字值,我会认真考虑以不同的方式存储它,因为 DBNULL 只会让您表示一个非数字值。如果您必须走这条路,我会将所有内容作为 VARCHAR 存储在数据库中,然后在 Java 或 SQL/JPA 中添加代码,将数字字符串解析为数字并动态运行您的公式。(你可以使用多个魔法值,如 -1、-2 等,但如果你有多个魔法值,它很快就会变得笨拙。)
为什么不把它当作一个单选框并将其映射到一个对象的 int 属性中。取值范围为 0 到 10,NA 可以表示为 -1。