MySQL/JDBC中的动态枚举



我要为日志系统设计一个数据库。

许多String列将具有有限数量的值,但事先不知道:如发送消息的模块的名称,或源主机名。

我想将它们存储为MySQL枚举以节省空间。因此,这个想法是,当枚举遇到新值时,它们会增长。

我将以这样的列开始:

host ENUM('localhost')

然后,在Java中,我将在启动时加载一次为主机名定义的enum值(我如何使用MySQL/JDBC ?? ?),并且每当遇到新主机时,我将更改enum。

你认为这是一个可行的/好主意吗?你做过这样的事吗?

提前感谢您的建议。

拉斐尔

这不是一个好主意。ENUM不是为此而设计的。您可以创建单独的表(host_id, host_name),并在主表中使用引用。例子:

CREATE TABLE `host` (
    `host_id` INT(10) NOT NULL AUTO_INCREMENT,
    `host_name` VARCHAR(50) NULL DEFAULT NULL,
    PRIMARY KEY (`host_id`)
)
CREATE TABLE `log` (
    `log_id` INT(10) NOT NULL AUTO_INCREMENT,
    `host_id` INT(10) NULL DEFAULT NULL,
    ...
    PRIMARY KEY (`log_id`),
    INDEX `FK__host` (`host_id`),
    CONSTRAINT `FK__host` FOREIGN KEY (`host_id`) REFERENCES `host` (`host_id`) ON UPDATE CASCADE ON DELETE CASCADE
)

乌利希期刊指南:

我认为最好的方式来存储主机是varchar/文本字段。这是最简单和最快的方式。我想你不必担心空间的问题。

为主机使用第二个表将减小大小,但会使编写日志变得复杂。使用ENUM会使编写变得复杂,并显著降低性能。

相关内容

  • 没有找到相关文章

最新更新