Динамические ENUM в MySQL / JDBC - PullRequest
0 голосов
/ 29 апреля 2011

Я собираюсь создать базу данных для системы ведения журналов.

Многие столбцы String будут иметь ограниченное количество значений, но заранее не известны: как и имена модулей, отправляющих сообщения,или исходные имена хостов.

Я хотел бы сохранить их как MySQL Enums для экономии места.Таким образом, идея заключается в том, что Enums растут по мере того, как они встречают новые значения.

Я бы начал со столбца, подобного:

host ENUM('localhost')

Затем в Java я загружал бы при запуске enumзначения, определенные для имен хостов одновременно (как мне это сделать с MySQL / JDBC ??), и я буду изменять Enum всякий раз, когда сталкиваюсь с новым хостом.

Считаете ли вы, что это выполнимо / хорошо?идея?Вы когда-нибудь делали что-то подобное?

Заранее спасибо за совет.

Рафаэль

1 Ответ

1 голос
/ 29 апреля 2011

Это не очень хорошая идея. 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
)

UPD:

Я думаю, что лучший способ хранения хоста - это varchar / текстовое поле. Это самый простой и быстрый способ. Я думаю, вам не нужно беспокоиться о пространстве.

Тем не менее.

Использование второй таблицы для хостов уменьшит размер, но усложнит написание логов. Использование ENUM усложняет написание и значительно снижает производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...