数据库枚举字段



我正在尝试模拟Microsoft SQL Server表中的Java Enum类型:

CREATE TABLE ResultType(
result TINYINT PRIMARY KEY,
description VARCHAR(30)
);
INSERT INTO ResultType
VALUES (0, 'Pass with distinction'),
(1, 'Pass with credit'),
(2, 'Pass'),
(3, 'Fail first attempt),
(4, 'Fail and debar');
CREATE TABLE CandidateResult(
candidate_id INT PRIMARY KEY,
candidate_name NVARCHAR(100),
result TINYINT References ResultType(result)
)

现在,确保ResultType表与Java ResultType枚举一致的最佳实践是什么?

enum ResultType { DISTINCTION, CREDIT, PASS, FAIL, DEBAR };
...
ResultType result;
if (mark > 90) {
result = ResultType.DISTINCTION;
} else if (mark > 70)
result = ResultType.CREDIT;
}
etc...
preparedStatement.setInt(1, result.ordinal)

以上内容对我来说不够健壮:我必须手动并不断地确保enum与ResultType表中的值一致。我应该如何确保这种通信始终有效,但又不会产生性能开销?

我的好方法是基于字典表ResultType。您还可以使用可读的类型名称来构建SQL报表。此外,使用表ResultType可以提供相同的附加信息,例如"过时"类型。

select cr.*, ct.description 
from CandidateResult cr 
join ResultType ct 
on cr.result = ct.result 
;

最新更新