数据库管理工具Navicat Premium使用教程:在数据库中存储枚举

在信息技术领域,俗称 IT 领域,枚举(ENUM)是一种特殊的数据类型,它封装了一组预定义的常量。因此,变量可能只保存枚举的其中一个预定义的值。常见的示例包括指南针方向(東、南、西、北)或星期几。

在数据库表中存储枚举有些复杂因素,其中之一是它们的值可能是数字或字母(即字符串)。而且,你可能希望阻止用户在表中添加任何不属于枚举集的允许值。我们将在今天的文章中解决这两个问题。

1、探索枚举值

最基本的枚举包含一组从零开始的 值,每个值由一个常量表示,以下是 Java 的例子:

public enum Day {    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,    THURSDAY, FRIDAY, SATURDAY}

更复杂的枚举可能包含其他类型;字符串是最常见的类型,但也支持更复杂的对象。以下是一个用于表示不同环境 URL 的枚举(也是 Java):

public enum Environment{    PROD("https://prod.domain.com:1088/"),    SIT("https://sit.domain.com:2019/"),    CIT("https://cit.domain.com:8080/"),    DEV("https://dev.domain.com:21323/");    private String url;    Environment(String envUrl) {        this.url = envUrl;    }    public String getUrl() {        return url;    }}

通常,将枚举存储为数字序数值被认为是不好的做法,因为这会使调试和支持变得困难。而存储转换为字符串的实际枚举值通常更可取。为了说明这一点,假设我们有一个纸牌的枚举:

public enum Suit {  Spade,  Heart,  Diamond,  Club}

现在假设你是一名数据库从业人员,正在试图解读以下两个查询结果:

Name          Suit------------  ----John Smith    2Ian Boyd      1Name          Suit------------  -------John Smith    DiamondIan Boyd      Heart

我认为你会同意后者更容易解释,因为第一个查询结果需要有源代码并找到分配给每个枚举成员的数值。

尽管存储字符串需要更多的磁盘空间,但枚举成员名称往往很短,而且硬盘价格很便宜,因此值得权衡取舍,让你的日常工作更轻松。

使用数值的另一个问题是它们难以更新。如果不强制使用旧数值,你无法轻松插入或重新排列成员。例如,将 Unknown值添加到 Suit 枚举将需要将其更新为:

public enum Suit { Unknown = 4, Heart = 1, Club = 3, Diamond = 2, Spade = 0 }

…以便保留已经存储在数据库中的旧数值。

2、验证数据库中的枚举值

现今许多数据库,包括 MySQL 和 SQL Server,都支持 ENUM 数据类型。ENUM 值指定为字符串,為了紧凑存储在存储时会自动编码为数字。

以下是 Navicat for MySQL 中的 MySQL 语句,用于创建表和填充包含衬衫和尺寸数据,以及获取中码衬衫数据的 SELECT 查询:

数据库管理工具Navicat Premium使用教程:在数据库中存储枚举

如果现在尝试插入一个无效的 ENUM 值,我们会得到以下错误:

数据库管理工具Navicat Premium使用教程:在数据库中存储枚举

尽管消息指出该值已被截断,但实际上并未插入数据。

3、总结

有兴趣试用Navicat for MySQL吗可以免费使用 14 天!!!

Navicat Premium是一个可连接多种数据库的管理工具,它可以让你以单一程序同时连接到MySQL、Oracle及PostgreSQL数据库,让管理不同类型的数据库更加的方便。Navicat Premium产品相关内容,欢迎您直接访问 了解更多详情。


数据库管理工具交流群:765665608   欢迎进群交流讨论

正版数据库管理软件下载、购买、授权咨询,请点这里!

标签:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年9月11日
下一篇 2022年9月11日

相关推荐

发表回复

登录后才能评论