目次

列挙値管理設計

要求

システム内で使用する列挙型の値をデータベースで管理したい

データモデル


CREATE TABLE IF NOT EXISTS `enumerations` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `slug` VARCHAR(255) NOT NULL comment '分類名 階層のセパレータは :: とする(先頭セパレータ不要)',
  `name` VARCHAR(255) NULL comment '表示名が value と異なる場合のみ指定',
  `value` VARCHAR(255) NOT NULL,
  `weight` INT(11) NOT NULL DEFAULT '0',
  `note` text NULL,
  `applied_at` DATETIME NOT NULL,
  `expired_at` DATETIME NULL DEFAULT NULL,
  `created_by` VARCHAR(20) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
  `created_at` DATETIME(3) NOT NULL,
  `updated_by` VARCHAR(20) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
  `updated_at` DATETIME(3) NULL DEFAULT NULL,
  `deleted_by` VARCHAR(20) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
  `deleted_at` DATETIME(3) NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `UNQ__slug__value__applied_at` (`slug`, `value`, `applied_at`),
  INDEX `IDX__slug` (`slug`)
) ENGINE=InnoDB COLLATE='utf8mb4_general_ci';

各種列挙値設計

費目