Files
sam-api/database/schema/mysql-schema.sql

1278 lines
80 KiB
SQL

/*M!999999\- enable the sandbox mode */
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
DROP TABLE IF EXISTS `api_keys`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `api_keys` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`is_active` tinyint(1) NOT NULL DEFAULT '1',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `api_keys_key_unique` (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `board_comments`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `board_comments` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '댓글 고유번호',
`post_id` bigint unsigned NOT NULL COMMENT '게시글 고유번호',
`tenant_id` bigint unsigned NOT NULL COMMENT '테넌트 고유번호',
`user_id` bigint unsigned DEFAULT NULL COMMENT '작성자 고유번호',
`parent_id` bigint unsigned DEFAULT NULL COMMENT '상위 댓글ID(대댓글)',
`content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '댓글 내용',
`ip_address` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '작성자 IP',
`status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'active' COMMENT '상태',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL COMMENT '삭제일시(Soft Delete)',
PRIMARY KEY (`id`),
KEY `board_comments_post_id_foreign` (`post_id`),
KEY `board_comments_tenant_id_foreign` (`tenant_id`),
KEY `board_comments_user_id_foreign` (`user_id`),
KEY `board_comments_parent_id_foreign` (`parent_id`),
CONSTRAINT `board_comments_parent_id_foreign` FOREIGN KEY (`parent_id`) REFERENCES `board_comments` (`id`),
CONSTRAINT `board_comments_post_id_foreign` FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`) ON DELETE CASCADE,
CONSTRAINT `board_comments_tenant_id_foreign` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`),
CONSTRAINT `board_comments_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `board_files`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `board_files` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '첨부파일 고유번호',
`post_id` bigint unsigned NOT NULL COMMENT '게시글 고유번호',
`file_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '저장경로',
`file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '원본 파일명',
`file_size` int NOT NULL COMMENT '파일 크기(Byte)',
`file_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '파일 MIME 타입',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `board_files_post_id_foreign` (`post_id`),
CONSTRAINT `board_files_post_id_foreign` FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `board_settings`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `board_settings` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '커스텀필드 고유번호',
`board_id` bigint unsigned NOT NULL COMMENT '게시판 고유번호',
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '필드명',
`field_key` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '필드키',
`field_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '필드유형',
`field_meta` json DEFAULT NULL COMMENT '필드메타',
`is_required` tinyint(1) NOT NULL DEFAULT '0' COMMENT '필수여부',
`sort_order` int NOT NULL DEFAULT '0' COMMENT '정렬순서',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `board_settings_board_id_field_key_unique` (`board_id`,`field_key`),
CONSTRAINT `board_settings_board_id_foreign` FOREIGN KEY (`board_id`) REFERENCES `boards` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `boards`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `boards` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '게시판 고유번호',
`tenant_id` bigint unsigned NOT NULL COMMENT '테넌트 고유번호',
`board_code` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '게시판 코드',
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '게시판 이름',
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '게시판 설명',
`editor_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'wysiwyg' COMMENT '에디터 유형',
`allow_files` tinyint(1) NOT NULL DEFAULT '1' COMMENT '파일첨부 허용 여부',
`max_file_count` int NOT NULL DEFAULT '5' COMMENT '최대 첨부파일 수',
`max_file_size` int NOT NULL DEFAULT '20480' COMMENT '최대 첨부파일 크기(KB)',
`extra_settings` json DEFAULT NULL COMMENT '추가 설정(JSON)',
`is_active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '활성화 여부',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `boards_tenant_id_board_code_unique` (`tenant_id`,`board_code`),
CONSTRAINT `boards_tenant_id_foreign` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `bom_items`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `bom_items` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`tenant_id` bigint unsigned NOT NULL COMMENT '멀티테넌시',
`bom_id` bigint unsigned NOT NULL COMMENT 'BOM ID',
`parent_id` bigint unsigned DEFAULT NULL COMMENT '상위 BOM Item',
`item_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'item 종류: part, product, bom',
`ref_id` bigint unsigned NOT NULL COMMENT '참조 ID',
`quantity` decimal(18,4) NOT NULL DEFAULT '1.0000',
`attributes` json DEFAULT NULL COMMENT '동적 속성',
`sort_order` int NOT NULL DEFAULT '0',
`created_by` bigint unsigned NOT NULL COMMENT '생성자(회원PK)',
`updated_by` bigint unsigned DEFAULT NULL COMMENT '수정자(회원PK)',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `bom_items_bom_id_foreign` (`bom_id`),
KEY `bom_items_parent_id_foreign` (`parent_id`),
CONSTRAINT `bom_items_bom_id_foreign` FOREIGN KEY (`bom_id`) REFERENCES `boms` (`id`),
CONSTRAINT `bom_items_parent_id_foreign` FOREIGN KEY (`parent_id`) REFERENCES `bom_items` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `boms`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `boms` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`tenant_id` bigint unsigned NOT NULL COMMENT '멀티테넌시',
`product_id` bigint unsigned NOT NULL COMMENT '제품ID',
`code` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'BOM코드',
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'BOM명',
`category_id` bigint unsigned NOT NULL COMMENT '카테고리ID(common_codes)',
`attributes` json DEFAULT NULL COMMENT '동적 속성',
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '설명',
`is_default` tinyint(1) NOT NULL DEFAULT '0' COMMENT '기본BOM여부',
`is_active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '사용여부',
`image_file_id` bigint unsigned DEFAULT NULL COMMENT '첨부파일ID',
`created_by` bigint unsigned NOT NULL COMMENT '생성자(회원PK)',
`updated_by` bigint unsigned DEFAULT NULL COMMENT '수정자(회원PK)',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `boms_tenant_id_product_id_code_unique` (`tenant_id`,`product_id`,`code`),
KEY `boms_product_id_foreign` (`product_id`),
KEY `boms_category_id_foreign` (`category_id`),
KEY `boms_image_file_id_foreign` (`image_file_id`),
CONSTRAINT `boms_category_id_foreign` FOREIGN KEY (`category_id`) REFERENCES `common_codes` (`id`),
CONSTRAINT `boms_image_file_id_foreign` FOREIGN KEY (`image_file_id`) REFERENCES `files` (`id`),
CONSTRAINT `boms_product_id_foreign` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `cache`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `cache` (
`key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`value` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`expiration` int NOT NULL,
PRIMARY KEY (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `cache_locks`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `cache_locks` (
`key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`owner` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`expiration` int NOT NULL,
PRIMARY KEY (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `categories`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `categories` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '카테고리 PK',
`tenant_id` bigint unsigned NOT NULL COMMENT '테넌트(고객사) ID',
`parent_id` bigint unsigned DEFAULT NULL COMMENT '상위 카테고리ID(NULL=최상위)',
`code` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '카테고리 코드(영문, 고유)',
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '카테고리명',
`is_active` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'Y' COMMENT '사용여부(Y/N)',
`sort_order` int NOT NULL DEFAULT '1' COMMENT '정렬순서',
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '비고',
`created_by` bigint unsigned DEFAULT NULL COMMENT '등록자(관리자ID)',
`updated_by` bigint unsigned DEFAULT NULL COMMENT '수정자(관리자ID)',
`deleted_by` bigint unsigned DEFAULT NULL COMMENT '삭제자(관리자ID)',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_tenant_code` (`tenant_id`,`code`),
KEY `idx_tenant` (`tenant_id`),
KEY `idx_parent_id` (`parent_id`),
CONSTRAINT `fk_category_parent` FOREIGN KEY (`parent_id`) REFERENCES `categories` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='제품 카테고리(계층형, 멀티테넌시)';
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `category_fields`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `category_fields` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '항목 PK',
`tenant_id` bigint unsigned NOT NULL COMMENT '테넌트(고객사) ID',
`category_id` bigint unsigned NOT NULL COMMENT '카테고리ID',
`field_key` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '항목키(영문, 고유)',
`field_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '항목명',
`field_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '입력유형(text, number, select 등)',
`is_required` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'N' COMMENT '필수여부(Y/N)',
`sort_order` int NOT NULL DEFAULT '1' COMMENT '정렬순서',
`default_value` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '기본값',
`options` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '선택지(콤보박스, JSON)',
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '비고',
`created_by` bigint unsigned DEFAULT NULL COMMENT '등록자(관리자ID)',
`updated_by` bigint unsigned DEFAULT NULL COMMENT '수정자(관리자ID)',
`deleted_by` bigint unsigned DEFAULT NULL COMMENT '삭제자(관리자ID)',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_tenant` (`tenant_id`),
KEY `idx_category_id` (`category_id`),
CONSTRAINT `fk_category_fields_category` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='카테고리별 항목(필드) 정의(멀티테넌시)';
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `category_logs`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `category_logs` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`category_id` bigint unsigned NOT NULL COMMENT '카테고리ID',
`tenant_id` bigint unsigned NOT NULL,
`action` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '동작(등록,수정,삭제: insert, update, delete)',
`changed_by` bigint unsigned DEFAULT NULL COMMENT '작업자ID',
`changed_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '작업시각',
`before_json` json DEFAULT NULL COMMENT '변경 전 데이터(스냅샷)',
`after_json` json DEFAULT NULL COMMENT '변경 후 데이터(스냅샷)',
`remarks` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '비고',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='카테고리 변경 이력 로그';
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `category_templates`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `category_templates` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '템플릿 PK',
`tenant_id` bigint unsigned NOT NULL COMMENT '테넌트(고객사) ID',
`category_id` bigint unsigned NOT NULL COMMENT '카테고리ID',
`version_no` int NOT NULL COMMENT '버전번호',
`template_json` json NOT NULL COMMENT '항목구조 스냅샷',
`applied_at` timestamp NOT NULL COMMENT '적용일시',
`created_by` bigint unsigned DEFAULT NULL COMMENT '등록자(관리자ID)',
`updated_by` bigint unsigned DEFAULT NULL COMMENT '수정자(관리자ID)',
`deleted_by` bigint unsigned DEFAULT NULL COMMENT '삭제자(관리자ID)',
`remarks` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '비고',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_tenant_category_version` (`tenant_id`,`category_id`,`version_no`),
KEY `idx_tenant` (`tenant_id`),
KEY `idx_category_id` (`category_id`),
CONSTRAINT `fk_category_templates_category` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='카테고리 템플릿 버전관리(멀티테넌시)';
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `clients`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `clients` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK',
`tenant_id` bigint unsigned NOT NULL COMMENT '테넌트ID',
`client_code` varchar(50) NOT NULL COMMENT '거래처코드',
`name` varchar(100) NOT NULL COMMENT '거래처명',
`contact_person` varchar(50) DEFAULT NULL COMMENT '담당자',
`phone` varchar(30) DEFAULT NULL COMMENT '연락처',
`email` varchar(80) DEFAULT NULL COMMENT '이메일',
`address` varchar(255) DEFAULT NULL COMMENT '주소',
`is_active` char(1) DEFAULT 'Y' COMMENT '사용여부',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_client_code` (`client_code`),
KEY `idx_tenant_id` (`tenant_id`),
CONSTRAINT `fk_clients_tenant` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='거래처/발주처 마스터';
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `common_codes`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `common_codes` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`tenant_id` bigint unsigned DEFAULT NULL COMMENT '멀티테넌시',
`code_group` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'category' COMMENT '코드 그룹',
`code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '코드값',
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '이름',
`parent_id` bigint unsigned DEFAULT NULL COMMENT '상위코드ID(트리)',
`attributes` json DEFAULT NULL COMMENT '동적 속성',
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '설명',
`is_active` tinyint NOT NULL DEFAULT '1' COMMENT '사용여부',
`sort_order` int NOT NULL DEFAULT '0' COMMENT '정렬순서',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `common_codes_tenant_id_code_group_code_unique` (`tenant_id`,`code_group`,`code`),
KEY `common_codes_parent_id_foreign` (`parent_id`),
CONSTRAINT `common_codes_parent_id_foreign` FOREIGN KEY (`parent_id`) REFERENCES `common_codes` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='공통코드 트리';
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `failed_jobs`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `failed_jobs` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`uuid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`connection` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`queue` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`payload` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`exception` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`failed_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `failed_jobs_uuid_unique` (`uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `files`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `files` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`tenant_id` bigint unsigned NOT NULL COMMENT '멀티테넌시',
`file_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '저장경로',
`original_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '원본 파일명',
`file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '저장 파일명 (난수)',
`file_name_old` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`file_size` int DEFAULT NULL,
`mime_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`fileable_id` bigint unsigned NOT NULL COMMENT 'Polymorphic - 연결된 모델의 PK',
`fileable_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Polymorphic - 연결된 모델 클래스명',
`uploaded_by` bigint unsigned DEFAULT NULL COMMENT '업로더 사용자 ID',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `job_batches`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `job_batches` (
`id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`total_jobs` int NOT NULL,
`pending_jobs` int NOT NULL,
`failed_jobs` int NOT NULL,
`failed_job_ids` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`options` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
`cancelled_at` int DEFAULT NULL,
`created_at` int NOT NULL,
`finished_at` int DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `jobs`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `jobs` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`queue` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`payload` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`attempts` tinyint unsigned NOT NULL,
`reserved_at` int unsigned DEFAULT NULL,
`available_at` int unsigned NOT NULL,
`created_at` int unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `jobs_queue_index` (`queue`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `log_session`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `log_session` (
`id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`ip_address` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT 'IP 주소',
`user_agent` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'User Agent',
`last_activity` int NOT NULL DEFAULT '0' COMMENT '마지막 활동 시간',
`timestamp` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '타임스탬프',
`data` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '세션 데이터',
PRIMARY KEY (`id`),
KEY `last_activity_idx` (`last_activity`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='세션정보 저장 테이블';
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `lot_sales`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `lot_sales` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '로트별 판매기록 PK',
`tenant_id` bigint unsigned NOT NULL COMMENT '테넌트ID',
`lot_id` bigint unsigned NOT NULL COMMENT '로트ID',
`sale_date` date NOT NULL COMMENT '판매일',
`author` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '등록자',
`workplace_name` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '작업장명',
`remarks` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '비고',
`created_by` bigint unsigned NOT NULL COMMENT '생성자(회원PK)',
`updated_by` bigint unsigned DEFAULT NULL COMMENT '수정자(회원PK)',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_sales_lot_id` (`lot_id`),
CONSTRAINT `fk_sales_lot_id` FOREIGN KEY (`lot_id`) REFERENCES `lots` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `lots`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `lots` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '로트관리 PK',
`tenant_id` bigint unsigned NOT NULL COMMENT '테넌트ID',
`lot_number` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '로트번호',
`material_id` bigint unsigned NOT NULL COMMENT '자재ID',
`specification` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '규격',
`length` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '길이',
`quantity` int NOT NULL COMMENT '수량',
`raw_lot_number` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '원자재 로트번호',
`fabric_lot` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '원단 로트',
`author` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '작성자',
`remarks` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '비고',
`created_by` bigint unsigned NOT NULL COMMENT '생성자(회원PK)',
`updated_by` bigint unsigned DEFAULT NULL COMMENT '수정자(회원PK)',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `lots_lot_number_unique` (`lot_number`),
KEY `idx_lots_material_id` (`material_id`),
CONSTRAINT `fk_lots_material_id` FOREIGN KEY (`material_id`) REFERENCES `materials` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `main_request_flows`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `main_request_flows` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`main_request_id` bigint unsigned NOT NULL COMMENT '메인 업무 ID',
`flowable_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '업무타입(estimate,order,purchase,work 등)',
`flowable_id` bigint unsigned NOT NULL COMMENT '해당 업무 PK',
`status_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '상태코드',
`action` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '액션(등록/수정/승인 등)',
`content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '변경내역/메모',
`actor_id` bigint unsigned DEFAULT NULL COMMENT '처리자(회원PK)',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_mrf_main_request` (`main_request_id`),
CONSTRAINT `fk_mrf_main_request` FOREIGN KEY (`main_request_id`) REFERENCES `main_requests` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='업무 전체/상세 흐름 이력(폴리모픽)';
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `main_requests`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `main_requests` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`tenant_id` bigint unsigned NOT NULL COMMENT '테넌트ID',
`status_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '업무진행상태(견적/수주/발주/작업 등)',
`description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '요약/비고',
`created_by` bigint unsigned NOT NULL,
`updated_by` bigint unsigned DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='업무 마스터(관계/흐름 중심)';
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `material_inspection_items`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `material_inspection_items` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '검사항목 PK',
`inspection_id` bigint unsigned NOT NULL COMMENT '수입검사ID',
`item_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '검사항목명',
`is_checked` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'N' COMMENT '체크여부(Y/N)',
`created_by` bigint unsigned NOT NULL COMMENT '생성자(회원PK)',
`updated_by` bigint unsigned DEFAULT NULL COMMENT '수정자(회원PK)',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_items_inspection_id` (`inspection_id`),
CONSTRAINT `fk_items_inspection_id` FOREIGN KEY (`inspection_id`) REFERENCES `material_inspections` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `material_inspections`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `material_inspections` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '수입검사 PK',
`receipt_id` bigint unsigned NOT NULL COMMENT '자재입고ID',
`tenant_id` bigint unsigned NOT NULL COMMENT '테넌트ID',
`inspection_date` date NOT NULL COMMENT '검사일자',
`inspector_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '검사자',
`approver_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '결재자',
`judgment_code` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '종합판정(common_codes)',
`status_code` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '상태코드(common_codes)',
`result_file_path` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '성적서 PDF 경로',
`remarks` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '비고',
`created_by` bigint unsigned NOT NULL COMMENT '생성자(회원PK)',
`updated_by` bigint unsigned DEFAULT NULL COMMENT '수정자(회원PK)',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_inspections_receipt_id` (`receipt_id`),
CONSTRAINT `fk_inspections_receipt_id` FOREIGN KEY (`receipt_id`) REFERENCES `material_receipts` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `material_receipts`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `material_receipts` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '자재입고 PK',
`material_id` bigint unsigned NOT NULL COMMENT '자재ID',
`tenant_id` bigint unsigned NOT NULL COMMENT '테넌트ID',
`receipt_date` date NOT NULL COMMENT '입고일',
`lot_number` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '로트번호',
`received_qty` decimal(12,2) NOT NULL COMMENT '입고수량',
`unit` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '단위',
`supplier_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '납품업체',
`manufacturer_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '제조사',
`purchase_price_excl_vat` decimal(12,2) DEFAULT NULL COMMENT '구매단가(부가세 제외)',
`weight_kg` decimal(12,2) DEFAULT NULL COMMENT '총 무게(kg)',
`status_code` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '상태코드(common_codes)',
`is_inspection` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'N' COMMENT '검사대상 여부(Y/N)',
`inspection_date` date DEFAULT NULL COMMENT '검사일자',
`remarks` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '비고',
`created_by` bigint unsigned NOT NULL COMMENT '생성자(회원PK)',
`updated_by` bigint unsigned DEFAULT NULL COMMENT '수정자(회원PK)',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_receipts_material_id` (`material_id`),
CONSTRAINT `fk_receipts_material_id` FOREIGN KEY (`material_id`) REFERENCES `materials` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `materials`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `materials` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '자재 PK',
`tenant_id` bigint unsigned NOT NULL COMMENT '테넌트ID',
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '자재명(품명)',
`specification` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '규격',
`material_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '자재코드',
`unit` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '단위',
`is_inspection` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'N' COMMENT '검사대상 여부(Y/N)',
`search_tag` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '검색 태그',
`remarks` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '비고',
`created_by` bigint unsigned NOT NULL COMMENT '생성자(회원PK)',
`updated_by` bigint unsigned DEFAULT NULL COMMENT '수정자(회원PK)',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `materials_material_code_unique` (`material_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `menus`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `menus` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK: 메뉴 ID',
`tenant_id` bigint unsigned DEFAULT NULL COMMENT 'FK: 테넌트 ID(null=공용메뉴)',
`parent_id` bigint unsigned DEFAULT NULL COMMENT '상위 메뉴 ID',
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '메뉴명',
`url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '메뉴 URL',
`is_active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '활성여부(1=활성,0=비활성)',
`sort_order` int NOT NULL DEFAULT '0' COMMENT '정렬순서',
`hidden` tinyint(1) NOT NULL DEFAULT '0' COMMENT '숨김여부',
`is_external` tinyint(1) NOT NULL DEFAULT '0' COMMENT '외부링크여부',
`external_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '외부링크 URL',
`icon` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '아이콘명',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `menus_tenant_id_index` (`tenant_id`),
KEY `menus_parent_id_index` (`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `migrations`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `migrations` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`migration` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`batch` int NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `model_has_permissions`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `model_has_permissions` (
`permission_id` bigint unsigned NOT NULL,
`model_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`model_id` bigint unsigned NOT NULL,
PRIMARY KEY (`permission_id`,`model_id`,`model_type`),
KEY `model_has_permissions_model_id_model_type_index` (`model_id`,`model_type`),
CONSTRAINT `model_has_permissions_permission_id_foreign` FOREIGN KEY (`permission_id`) REFERENCES `permissions` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `model_has_roles`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `model_has_roles` (
`role_id` bigint unsigned NOT NULL,
`model_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`model_id` bigint unsigned NOT NULL,
PRIMARY KEY (`role_id`,`model_id`,`model_type`),
KEY `model_has_roles_model_id_model_type_index` (`model_id`,`model_type`),
CONSTRAINT `model_has_roles_role_id_foreign` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `order_histories`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `order_histories` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK',
`tenant_id` bigint unsigned NOT NULL COMMENT '테넌트ID',
`order_id` bigint unsigned NOT NULL COMMENT 'orders.id',
`history_type` varchar(20) NOT NULL COMMENT '이력구분(수정/견적/발주/메모)',
`content` text NOT NULL COMMENT '내용',
`created_by` bigint unsigned DEFAULT NULL COMMENT '작성자',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_order_id` (`order_id`),
KEY `fk_order_histories_created_by` (`created_by`),
CONSTRAINT `fk_order_histories_created_by` FOREIGN KEY (`created_by`) REFERENCES `users` (`id`),
CONSTRAINT `fk_order_histories_order` FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_order_histories_tenant` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='주문 이력/메모';
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `order_item_components`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `order_item_components` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK',
`tenant_id` bigint unsigned NOT NULL COMMENT '테넌트ID',
`order_item_id` bigint unsigned NOT NULL COMMENT 'order_items.id',
`component_type` varchar(20) NOT NULL COMMENT '타입(material/product/part/bom)',
`component_id` bigint unsigned NOT NULL COMMENT '타입별 PK',
`quantity` decimal(12,2) NOT NULL DEFAULT '1.00' COMMENT '필요수량',
`unit` varchar(10) DEFAULT NULL,
`price` decimal(12,2) DEFAULT NULL,
`remarks` varchar(100) DEFAULT NULL,
`created_by` bigint unsigned NOT NULL COMMENT '생성자',
`updated_by` bigint unsigned DEFAULT NULL COMMENT '수정자',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_order_item_id` (`order_item_id`),
KEY `idx_component` (`component_type`,`component_id`),
CONSTRAINT `fk_oic_order_item` FOREIGN KEY (`order_item_id`) REFERENCES `order_items` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_oic_tenant` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='주문항목 투입구성(자재/제품/부품 등)';
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `order_items`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `order_items` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK',
`tenant_id` bigint unsigned NOT NULL COMMENT '테넌트ID',
`order_id` bigint unsigned NOT NULL COMMENT 'orders.id',
`serial_no` int NOT NULL COMMENT '일련번호',
`product_id` bigint unsigned DEFAULT NULL COMMENT '제품ID',
`quantity` int NOT NULL DEFAULT '1' COMMENT '수량',
`status_code` varchar(20) DEFAULT NULL COMMENT '상세상태 코드',
`design_code` varchar(100) DEFAULT NULL COMMENT '설계도면/부호',
`remarks` text COMMENT '비고',
`attributes` json DEFAULT NULL COMMENT '확장필드',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_order_id` (`order_id`),
KEY `idx_product_id` (`product_id`),
CONSTRAINT `fk_order_items_order` FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_order_items_product` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`),
CONSTRAINT `fk_order_items_tenant` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='주문 상세(제품/오픈사이즈 등)';
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `order_versions`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `order_versions` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`tenant_id` bigint unsigned NOT NULL,
`order_id` bigint unsigned NOT NULL,
`version_no` int NOT NULL,
`version_type` varchar(20) NOT NULL,
`status_code` varchar(20) NOT NULL,
`changed_fields` json DEFAULT NULL COMMENT '변경된 필드만 저장(전/후값)',
`changed_by` bigint unsigned DEFAULT NULL,
`changed_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`change_note` varchar(255) DEFAULT NULL COMMENT '변경사유/메모',
PRIMARY KEY (`id`),
KEY `idx_order_id` (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='주문상태/중요필드 버전 히스토리';
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `orders`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `orders` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK',
`tenant_id` bigint unsigned NOT NULL COMMENT '테넌트ID',
`order_no` varchar(30) NOT NULL COMMENT '주문/견적번호',
`order_type_code` varchar(20) NOT NULL COMMENT '업무구분(견적/수주/발주 등)',
`status_code` varchar(20) NOT NULL COMMENT '진행상태 코드',
`category_code` varchar(20) DEFAULT NULL COMMENT '대분류(스크린/철재 등)',
`product_id` bigint unsigned DEFAULT NULL COMMENT '대표 제품ID',
`received_at` datetime DEFAULT NULL COMMENT '접수일',
`writer_id` bigint unsigned DEFAULT NULL COMMENT '작성자',
`client_id` bigint unsigned DEFAULT NULL COMMENT '거래처ID',
`client_contact` varchar(50) DEFAULT NULL COMMENT '담당자 연락처',
`site_name` varchar(100) DEFAULT NULL COMMENT '현장명',
`quantity` int DEFAULT NULL COMMENT '전체 수량',
`delivery_date` date DEFAULT NULL COMMENT '출고일',
`delivery_method_code` varchar(20) DEFAULT NULL COMMENT '운송방법',
`memo` text COMMENT '비고',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_client_id` (`client_id`),
KEY `idx_product_id` (`product_id`),
KEY `fk_orders_writer` (`writer_id`),
CONSTRAINT `fk_orders_client` FOREIGN KEY (`client_id`) REFERENCES `clients` (`id`),
CONSTRAINT `fk_orders_product` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`),
CONSTRAINT `fk_orders_tenant` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`),
CONSTRAINT `fk_orders_writer` FOREIGN KEY (`writer_id`) REFERENCES `users` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='수주/견적/발주 메인';
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `parts`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `parts` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`tenant_id` bigint unsigned NOT NULL COMMENT '멀티테넌시',
`code` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '부품코드',
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '부품명',
`category_id` bigint unsigned NOT NULL COMMENT '카테고리ID(common_codes)',
`part_type_id` bigint unsigned DEFAULT NULL COMMENT '부품타입ID(common_codes)',
`unit` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '단위',
`attributes` json DEFAULT NULL COMMENT '동적 속성',
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '설명',
`is_active` tinyint NOT NULL DEFAULT '1' COMMENT '사용여부',
`created_by` bigint unsigned NOT NULL COMMENT '생성자(회원PK)',
`updated_by` bigint unsigned DEFAULT NULL COMMENT '수정자(회원PK)',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `parts_tenant_id_code_unique` (`tenant_id`,`code`),
KEY `parts_category_id_foreign` (`category_id`),
KEY `parts_part_type_id_foreign` (`part_type_id`),
CONSTRAINT `parts_category_id_foreign` FOREIGN KEY (`category_id`) REFERENCES `common_codes` (`id`),
CONSTRAINT `parts_part_type_id_foreign` FOREIGN KEY (`part_type_id`) REFERENCES `common_codes` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `password_reset_tokens`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `password_reset_tokens` (
`email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`token` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `payments`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `payments` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK',
`subscription_id` bigint unsigned NOT NULL,
`amount` decimal(12,2) NOT NULL COMMENT '결제금액',
`payment_method` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '결제수단',
`transaction_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'PG 거래ID',
`paid_at` datetime NOT NULL COMMENT '결제일시',
`status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'paid' COMMENT '결제상태(paid, failed 등)',
`memo` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '비고',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `payments_subscription_id_foreign` (`subscription_id`),
CONSTRAINT `payments_subscription_id_foreign` FOREIGN KEY (`subscription_id`) REFERENCES `subscriptions` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `permissions`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `permissions` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`tenant_id` bigint unsigned DEFAULT NULL COMMENT '테넌트(고객사) ID',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`guard_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `permissions_name_guard_name_unique` (`name`,`guard_name`),
KEY `permissions_tenant_id_index` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `personal_access_tokens`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `personal_access_tokens` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`tokenable_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`tokenable_id` bigint unsigned NOT NULL,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`token` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`abilities` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
`last_used_at` timestamp NULL DEFAULT NULL,
`expires_at` timestamp NULL DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `personal_access_tokens_token_unique` (`token`),
KEY `personal_access_tokens_tokenable_type_tokenable_id_index` (`tokenable_type`,`tokenable_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `plans`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `plans` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '플랜명',
`code` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '플랜 코드',
`description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '설명',
`price` decimal(12,2) NOT NULL COMMENT '월 요금',
`billing_cycle` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'monthly' COMMENT '청구 주기',
`features` json DEFAULT NULL COMMENT '제공 기능/제한사항',
`is_active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '사용여부',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `plans_code_unique` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `post_custom_field_values`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `post_custom_field_values` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '필드값 고유번호',
`post_id` bigint unsigned NOT NULL COMMENT '게시글 고유번호',
`field_id` bigint unsigned NOT NULL COMMENT '커스텀필드 고유번호',
`value` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '필드값',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `post_custom_field_values_post_id_field_id_unique` (`post_id`,`field_id`),
KEY `post_custom_field_values_field_id_foreign` (`field_id`),
CONSTRAINT `post_custom_field_values_field_id_foreign` FOREIGN KEY (`field_id`) REFERENCES `board_settings` (`id`),
CONSTRAINT `post_custom_field_values_post_id_foreign` FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `posts`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `posts` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '게시글 고유번호',
`tenant_id` bigint unsigned NOT NULL COMMENT '테넌트 고유번호',
`board_id` bigint unsigned NOT NULL COMMENT '게시판 고유번호',
`user_id` bigint unsigned DEFAULT NULL COMMENT '작성자 고유번호',
`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '제목',
`content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '내용',
`editor_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'wysiwyg' COMMENT '에디터 유형',
`ip_address` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '작성자 IP',
`is_notice` tinyint(1) NOT NULL DEFAULT '0' COMMENT '공지글 여부',
`is_secret` tinyint(1) NOT NULL DEFAULT '0' COMMENT '비밀글 여부',
`views` int NOT NULL DEFAULT '0' COMMENT '조회수',
`status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'active' COMMENT '상태',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL COMMENT '삭제일시(Soft Delete)',
PRIMARY KEY (`id`),
KEY `posts_tenant_id_board_id_index` (`tenant_id`,`board_id`),
KEY `posts_board_id_foreign` (`board_id`),
KEY `posts_status_index` (`status`),
CONSTRAINT `posts_board_id_foreign` FOREIGN KEY (`board_id`) REFERENCES `boards` (`id`),
CONSTRAINT `posts_tenant_id_foreign` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `price_histories`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `price_histories` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`tenant_id` bigint unsigned NOT NULL COMMENT '멀티테넌시',
`item_type_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '대상구분(product/part/bom 등, code_group=price_item_type)',
`item_id` bigint unsigned NOT NULL COMMENT '대상ID',
`price_type_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '단가구분(default/20%up/10%discount 등, code_group=price_type)',
`price` decimal(18,4) NOT NULL COMMENT '단가',
`started_at` date NOT NULL,
`ended_at` date DEFAULT NULL,
`created_by` bigint unsigned NOT NULL COMMENT '생성자(회원PK)',
`updated_by` bigint unsigned DEFAULT NULL COMMENT '수정자(회원PK)',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_price_histories_main` (`tenant_id`,`item_type_code`,`item_id`,`started_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `products`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `products` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`tenant_id` bigint unsigned NOT NULL COMMENT '멀티테넌시',
`code` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '제품코드',
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '제품명',
`category_id` bigint unsigned NOT NULL COMMENT '카테고리ID(common_codes)',
`attributes` json DEFAULT NULL COMMENT '동적 속성',
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '설명',
`is_active` tinyint NOT NULL DEFAULT '1' COMMENT '사용여부',
`created_by` bigint unsigned NOT NULL COMMENT '생성자(회원PK)',
`updated_by` bigint unsigned DEFAULT NULL COMMENT '수정자(회원PK)',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `products_tenant_id_code_unique` (`tenant_id`,`code`),
KEY `products_category_id_foreign` (`category_id`),
CONSTRAINT `products_category_id_foreign` FOREIGN KEY (`category_id`) REFERENCES `common_codes` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `role_has_permissions`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `role_has_permissions` (
`permission_id` bigint unsigned NOT NULL,
`role_id` bigint unsigned NOT NULL,
PRIMARY KEY (`permission_id`,`role_id`),
KEY `role_has_permissions_role_id_foreign` (`role_id`),
CONSTRAINT `role_has_permissions_permission_id_foreign` FOREIGN KEY (`permission_id`) REFERENCES `permissions` (`id`) ON DELETE CASCADE,
CONSTRAINT `role_has_permissions_role_id_foreign` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `role_menu_permissions`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `role_menu_permissions` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK: 역할-메뉴 권한 ID',
`role_id` bigint unsigned NOT NULL COMMENT 'FK: 역할 ID',
`menu_id` bigint unsigned NOT NULL COMMENT 'FK: 메뉴 ID',
`access` tinyint(1) NOT NULL DEFAULT '0' COMMENT '메뉴 접근 권한',
`read` tinyint(1) NOT NULL DEFAULT '0' COMMENT '조회 권한',
`write` tinyint(1) NOT NULL DEFAULT '0' COMMENT '등록/수정/삭제 권한',
`export` tinyint(1) NOT NULL DEFAULT '0' COMMENT '다운로드 권한',
`approve` tinyint(1) NOT NULL DEFAULT '0' COMMENT '승인/반려 권한',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `role_menu_permissions_role_id_menu_id_unique` (`role_id`,`menu_id`),
KEY `role_menu_permissions_menu_id_foreign` (`menu_id`),
CONSTRAINT `role_menu_permissions_menu_id_foreign` FOREIGN KEY (`menu_id`) REFERENCES `menus` (`id`) ON DELETE CASCADE,
CONSTRAINT `role_menu_permissions_role_id_foreign` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `roles`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `roles` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK: 역할 ID',
`tenant_id` bigint unsigned NOT NULL,
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '역할명',
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '설명',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL COMMENT '삭제일시(소프트삭제)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_roles_tenant_name` (`tenant_id`,`name`),
KEY `roles_tenant_id_index` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `sessions`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `sessions` (
`id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`user_id` bigint unsigned DEFAULT NULL,
`ip_address` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`user_agent` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
`payload` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`last_activity` int NOT NULL,
PRIMARY KEY (`id`),
KEY `sessions_user_id_index` (`user_id`),
KEY `sessions_last_activity_index` (`last_activity`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `setting_field_defs`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `setting_field_defs` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`field_key` varchar(64) NOT NULL COMMENT '예: department, position, job_title',
`label` varchar(100) NOT NULL COMMENT '표시 라벨',
`data_type` varchar(20) NOT NULL COMMENT 'string|number|date|file|bigint 등',
`input_type` varchar(30) NOT NULL COMMENT 'text|select|textarea|date|file|select_user 등',
`option_source` varchar(20) DEFAULT NULL COMMENT 'static|tenant_list|table_ref',
`option_payload` json DEFAULT NULL COMMENT 'option_source에 따른 설정(JSON)',
`comment` text,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`storage_area` varchar(50) NOT NULL DEFAULT 'tenant_profile' COMMENT 'users: users 컬럼, tenant_profile: tenant_user_profiles 컬럼, tenant_profile_json: json_extra에 key로 저장',
`storage_key` varchar(64) DEFAULT NULL COMMENT '저장할 컬럼명(users/tenant_user_profiles) 또는 json key(tenant_profile_json)',
`is_core` tinyint(1) NOT NULL DEFAULT '0' COMMENT '1=코어 필드(이름/이메일 등), 테넌트가 비활성 불가',
PRIMARY KEY (`id`),
UNIQUE KEY `field_key` (`field_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='전역 필드 사전';
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `subscriptions`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `subscriptions` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK',
`tenant_id` bigint unsigned NOT NULL,
`plan_id` bigint unsigned NOT NULL,
`started_at` date NOT NULL COMMENT '구독 시작일',
`ended_at` date DEFAULT NULL COMMENT '구독 종료일(해지시)',
`status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'active' COMMENT '상태(active, canceled, expired 등)',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `subscriptions_tenant_id_foreign` (`tenant_id`),
KEY `subscriptions_plan_id_foreign` (`plan_id`),
CONSTRAINT `subscriptions_plan_id_foreign` FOREIGN KEY (`plan_id`) REFERENCES `plans` (`id`),
CONSTRAINT `subscriptions_tenant_id_foreign` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `taggables`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `taggables` (
`tag_id` bigint unsigned NOT NULL COMMENT '태그 ID (tags.id FK)',
`taggable_id` bigint unsigned NOT NULL COMMENT '태그가 연결된 엔티티의 PK',
`taggable_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '엔티티 타입(모델명)',
`created_at` timestamp NULL DEFAULT NULL COMMENT '연결일시',
PRIMARY KEY (`tag_id`,`taggable_id`,`taggable_type`),
CONSTRAINT `taggables_ibfk_1` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='태그-대상(제품, 부품, 자재, BOM 등) 다형성 연결';
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `tags`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `tags` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK',
`tenant_id` bigint unsigned NOT NULL COMMENT '테넌트 ID',
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '태그명',
`created_at` timestamp NULL DEFAULT NULL COMMENT '생성일시',
`updated_at` timestamp NULL DEFAULT NULL COMMENT '수정일시',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tenant_tag_name` (`tenant_id`,`name`),
CONSTRAINT `tags_ibfk_1` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='테넌트별 태그 목록';
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `tenant_field_settings`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `tenant_field_settings` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`tenant_id` bigint unsigned NOT NULL,
`field_key` varchar(64) NOT NULL,
`enabled` tinyint(1) NOT NULL DEFAULT '1' COMMENT '노출 여부',
`required` tinyint(1) NOT NULL DEFAULT '0' COMMENT '필수 여부',
`sort_order` int NOT NULL DEFAULT '0' COMMENT '정렬',
`option_group_id` bigint unsigned DEFAULT NULL COMMENT 'tenant_option_groups.id (option_source=tenant_list일 경우)',
`code_group` varchar(50) DEFAULT NULL COMMENT 'common_codes 참조 그룹',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tenant_field` (`tenant_id`,`field_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='테넌트별 회원필드 구동 설정';
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `tenant_option_groups`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `tenant_option_groups` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`tenant_id` bigint unsigned NOT NULL,
`group_key` varchar(64) NOT NULL COMMENT '예: position, job_title, work_location 등',
`name` varchar(100) NOT NULL COMMENT '테넌트 화면 표기용 이름',
`description` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tenant_group` (`tenant_id`,`group_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='테넌트 관리형 옵션 그룹';
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `tenant_option_values`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `tenant_option_values` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`group_id` bigint unsigned NOT NULL,
`value_key` varchar(64) NOT NULL COMMENT '내부키 (영문/코드)',
`value_label` varchar(100) NOT NULL COMMENT '화면 라벨',
`sort_order` int NOT NULL DEFAULT '0',
`is_active` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_group_value` (`group_id`,`value_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='옵션 그룹의 항목 값';
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `tenant_user_profiles`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `tenant_user_profiles` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`tenant_id` bigint unsigned NOT NULL COMMENT '테넌트',
`user_id` bigint unsigned NOT NULL COMMENT 'users.id',
`department_id` bigint unsigned DEFAULT NULL COMMENT '부서(조직 트리 또는 common_codes)',
`position_key` varchar(64) DEFAULT NULL COMMENT '직급 key (tenant_option_values.value_key or common_codes.code)',
`job_title_key` varchar(64) DEFAULT NULL COMMENT '직책 key',
`work_location_key` varchar(64) DEFAULT NULL COMMENT '근무지 key',
`employment_type_key` varchar(64) DEFAULT NULL COMMENT '고용형태 key',
`manager_user_id` bigint unsigned DEFAULT NULL COMMENT '직속상급자 users.id',
`json_extra` json DEFAULT NULL COMMENT '은행/계좌/주소/개인옵션 등 유연필드',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`profile_photo_path` varchar(2048) DEFAULT NULL COMMENT '테넌트 전용 아바타(없으면 전역 사용)',
`display_name` varchar(255) DEFAULT NULL COMMENT '테넌트 전용 표기명(없으면 users.name)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tenant_user` (`tenant_id`,`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='테넌트별 회원 프로필';
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `tenants`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `tenants` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK',
`company_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '회사/조직명',
`code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '테넌트 코드',
`email` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '대표 이메일',
`phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '대표 전화번호',
`address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '주소',
`business_num` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '사업자등록번호(10자리)',
`corp_reg_no` varchar(13) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '법인등록번호(13자리, 법인만)',
`ceo_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '대표자명',
`homepage` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '홈페이지 주소',
`fax` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '팩스번호',
`logo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '회사 로고 이미지 경로',
`admin_memo` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '관리자 메모/비고',
`options` json DEFAULT NULL COMMENT '회사별 옵션 정보(확장용 JSON)',
`tenant_st_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'trial' COMMENT '테넌트 상태(trial,active,suspended,cancelled)',
`plan_id` bigint unsigned DEFAULT NULL COMMENT '현재 요금제(플랜) ID',
`subscription_id` bigint unsigned DEFAULT NULL COMMENT '현재 구독 정보 ID',
`max_users` int NOT NULL DEFAULT '10' COMMENT '최대 사용자 수',
`trial_ends_at` datetime DEFAULT NULL COMMENT '트라이얼 종료일',
`expires_at` datetime DEFAULT NULL COMMENT '계약 만료일',
`last_paid_at` datetime DEFAULT NULL COMMENT '마지막 결제일',
`billing_tp_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'monthly' COMMENT '결제 주기(monthly,yearly)',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `tenants_code_unique` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `user_menu_permissions`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `user_menu_permissions` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK: 사용자-메뉴 권한 ID',
`user_id` bigint unsigned NOT NULL COMMENT 'FK: 사용자 ID',
`menu_id` bigint unsigned NOT NULL COMMENT 'FK: 메뉴 ID',
`access` tinyint(1) NOT NULL DEFAULT '0' COMMENT '메뉴 접근 권한',
`read` tinyint(1) NOT NULL DEFAULT '0' COMMENT '조회 권한',
`write` tinyint(1) NOT NULL DEFAULT '0' COMMENT '등록/수정/삭제 권한',
`export` tinyint(1) NOT NULL DEFAULT '0' COMMENT '다운로드 권한',
`approve` tinyint(1) NOT NULL DEFAULT '0' COMMENT '승인/반려 권한',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_menu_permissions_user_id_menu_id_unique` (`user_id`,`menu_id`),
KEY `user_menu_permissions_menu_id_foreign` (`menu_id`),
CONSTRAINT `user_menu_permissions_menu_id_foreign` FOREIGN KEY (`menu_id`) REFERENCES `menus` (`id`) ON DELETE CASCADE,
CONSTRAINT `user_menu_permissions_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `user_roles`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `user_roles` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK: 회원별 역할 매핑 ID',
`user_id` bigint unsigned NOT NULL COMMENT 'FK: 회원ID',
`tenant_id` bigint unsigned NOT NULL COMMENT 'FK: 테넌트ID',
`role_id` bigint unsigned NOT NULL COMMENT 'FK: 역할ID',
`assigned_at` timestamp NULL DEFAULT NULL COMMENT '역할 할당일',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL COMMENT '삭제일시(소프트삭제)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_tenant_role` (`user_id`,`tenant_id`,`role_id`),
KEY `user_roles_tenant_id_foreign` (`tenant_id`),
KEY `user_roles_role_id_foreign` (`role_id`),
CONSTRAINT `user_roles_role_id_foreign` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`),
CONSTRAINT `user_roles_tenant_id_foreign` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`),
CONSTRAINT `user_roles_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `user_tenants`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `user_tenants` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK: 회원-테넌트 소속 ID',
`user_id` bigint unsigned NOT NULL COMMENT 'FK: 회원ID',
`tenant_id` bigint unsigned NOT NULL COMMENT 'FK: 테넌트ID',
`is_active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '활성화 여부',
`joined_at` timestamp NULL DEFAULT NULL COMMENT '소속일시',
`left_at` timestamp NULL DEFAULT NULL COMMENT '탈퇴일시',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL COMMENT '삭제일시(소프트삭제)',
`is_default` tinyint(1) NOT NULL DEFAULT '0' COMMENT '기본 설정 여부',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_tenant` (`user_id`,`tenant_id`),
KEY `user_tenants_tenant_id_foreign` (`tenant_id`),
CONSTRAINT `user_tenants_tenant_id_foreign` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`),
CONSTRAINT `user_tenants_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `users`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `users` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`user_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '회원 아이디',
`phone` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '회원 전화번호',
`options` json DEFAULT NULL COMMENT '회사별 옵션 정보(계좌, 사번 등)',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '회원 이름',
`email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '이메일',
`email_verified_at` timestamp NULL DEFAULT NULL,
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '비밀번호',
`last_login_at` timestamp NULL DEFAULT NULL COMMENT '마지막 로그인 일시',
`two_factor_secret` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
`two_factor_recovery_codes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
`two_factor_confirmed_at` timestamp NULL DEFAULT NULL,
`remember_token` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '자동로그인 토큰',
`current_team_id` bigint unsigned DEFAULT NULL,
`profile_photo_path` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '프로필 사진 경로',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL COMMENT '삭제일시(소프트삭제)',
PRIMARY KEY (`id`),
UNIQUE KEY `users_user_id_unique` (`user_id`),
UNIQUE KEY `uk_users_tenant_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;