-- 1. 기존 domain 데이터베이스 삭제 후 재생성
DROP DATABASE IF EXISTS domain;
CREATE DATABASE domain CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE domain;
-- 2. FK 제약조건 고려한 테이블 DROP (역순)
DROP TABLE IF EXISTS 속성;
DROP TABLE IF EXISTS 표준용어구성;
DROP TABLE IF EXISTS 표준용어;
DROP TABLE IF EXISTS 분류단어;
DROP TABLE IF EXISTS 일반단어;
DROP TABLE IF EXISTS 표준단어;
DROP TABLE IF EXISTS 통합코드도메인유효값;
DROP TABLE IF EXISTS 통합코드도메인;
DROP TABLE IF EXISTS 표준도메인;
DROP TABLE IF EXISTS 도메인그룹;
-- 3. 도메인그룹 테이블 생성
CREATE TABLE 도메인그룹 (
도메인그룹명 VARCHAR(100) NOT NULL COMMENT '도메인 그룹명, 고유 식별자 역할',
설명 TEXT COMMENT '도메인 그룹에 대한 설명',
PRIMARY KEY (도메인그룹명)
) COMMENT='도메인그룹 - 도메인 최상위 그룹';
-- 4. 표준도메인 테이블 생성
CREATE TABLE 표준도메인 (
표준도메인명 VARCHAR(100) NOT NULL COMMENT '표준도메인명',
도메인그룹명 VARCHAR(100) NOT NULL COMMENT '도메인그룹명(FK)',
데이터타입 VARCHAR(50) COMMENT '데이터타입',
데이터길이 INT COMMENT '데이터길이',
SCALE INT COMMENT '소수점 자릿수',
도메인유형 VARCHAR(50) COMMENT '도메인유형',
유효값범위_형식 TEXT COMMENT '유효값 범위 또는 형식',
도메인설명 TEXT COMMENT '도메인 설명',
PRIMARY KEY (표준도메인명),
FOREIGN KEY (도메인그룹명) REFERENCES 도메인그룹(도메인그룹명)
) COMMENT='표준도메인 테이블';
-- 5. 통합코드도메인 테이블 생성
CREATE TABLE 통합코드도메인 (
통합코드도메인명 VARCHAR(100) NOT NULL PRIMARY KEY COMMENT '통합코드도메인명(고유)'
) COMMENT='통합코드도메인 테이블';
-- 6. 통합코드도메인유효값 테이블 생성
CREATE TABLE 통합코드도메인유효값 (
통합코드도메인명 VARCHAR(100) NOT NULL COMMENT '통합코드도메인명(FK)',
코드값 VARCHAR(100) NOT NULL COMMENT '코드값',
코드값명 VARCHAR(100) COMMENT '코드값명',
PRIMARY KEY (통합코드도메인명, 코드값),
FOREIGN KEY (통합코드도메인명) REFERENCES 통합코드도메인(통합코드도메인명)
) COMMENT='통합코드도메인유효값';
-- 7. 표준단어 테이블 생성
CREATE TABLE 표준단어 (
표준단어명 VARCHAR(100) NOT NULL COMMENT '표준단어명',
단어영문약어명 VARCHAR(100) COMMENT '영문 약어명',
단어영문정식명 VARCHAR(100) COMMENT '영문 정식명',
분류단어여부 BOOLEAN COMMENT '분류단어 여부',
단어설명 TEXT COMMENT '단어 설명',
PRIMARY KEY (표준단어명)
) COMMENT='표준단어 테이블';
-- 8. 일반단어 테이블 생성
CREATE TABLE 일반단어 (
표준단어명 VARCHAR(100) NOT NULL COMMENT '표준단어명(FK)',
PRIMARY KEY (표준단어명),
FOREIGN KEY (표준단어명) REFERENCES 표준단어(표준단어명)
) COMMENT='일반단어 테이블';
-- 9. 분류단어 테이블 생성
CREATE TABLE 분류단어 (
표준단어명 VARCHAR(100) NOT NULL COMMENT '표준단어명(FK)',
도메인그룹명 VARCHAR(100) NOT NULL COMMENT '도메인그룹명(FK)',
PRIMARY KEY (표준단어명, 도메인그룹명),
FOREIGN KEY (표준단어명) REFERENCES 표준단어(표준단어명),
FOREIGN KEY (도메인그룹명) REFERENCES 도메인그룹(도메인그룹명)
) COMMENT='분류단어 테이블';
-- 10. 표준용어 테이블 생성
CREATE TABLE 표준용어 (
표준용어명 VARCHAR(100) NOT NULL COMMENT '표준용어명',
표준도메인명 VARCHAR(100) NOT NULL COMMENT '표준도메인명(FK)',
용어영문명 VARCHAR(100) COMMENT '용어 영문명',
용어영문정식명 VARCHAR(100) COMMENT '용어 영문 정식명',
용어설명 TEXT COMMENT '용어 설명',
PRIMARY KEY (표준용어명),
FOREIGN KEY (표준도메인명) REFERENCES 표준도메인(표준도메인명)
) COMMENT='표준용어 테이블';
-- 11. 표준용어구성 테이블 생성
CREATE TABLE 표준용어구성 (
표준용어명 VARCHAR(100) NOT NULL COMMENT '표준용어명(FK)',
표준단어명 VARCHAR(100) NOT NULL COMMENT '표준단어명(FK)',
구성순서 INT COMMENT '구성 순서',
PRIMARY KEY (표준용어명, 표준단어명),
FOREIGN KEY (표준용어명) REFERENCES 표준용어(표준용어명),
FOREIGN KEY (표준단어명) REFERENCES 표준단어(표준단어명)
) COMMENT='표준용어구성 테이블';
-- 12. 속성 테이블 생성
CREATE TABLE 속성 (
엔터티명 VARCHAR(100) NOT NULL COMMENT '엔터티명',
속성명 VARCHAR(100) NOT NULL COMMENT '속성명',
표준용어명 VARCHAR(100) COMMENT '표준용어명(FK)',
PRIMARY KEY (엔터티명, 속성명),
FOREIGN KEY (표준용어명) REFERENCES 표준용어(표준용어명)
) COMMENT='속성 테이블';
-- 13. 기본 데이터 삽입 (FK 순서 엄수)
-- 도메인그룹 데이터
INSERT INTO 도메인그룹 (도메인그룹명, 설명) VALUES
('금융', '금융 관련 도메인: 대출, 예금, 투자 등'),
('고객관리', '고객 정보 및 상담 도메인'),
('상품관리', '제품 및 서비스 관리 도메인');
-- 표준도메인 데이터
INSERT INTO 표준도메인
(표준도메인명, 도메인그룹명, 데이터타입, 데이터길이, SCALE, 도메인유형, 유효값범위_형식, 도메인설명)
VALUES
('대출구분', '금융', 'VARCHAR', 20, NULL, '코드', '신용대출, 담보대출, 전세자금대출', '대출 구분 코드'),
('계약번호', '금융', 'VARCHAR', 30, NULL, '식별자', NULL, '대출 계약 번호'),
('금리', '금융', 'DECIMAL', 5, 2, '수치', '0.00 ~ 100.00', '대출 이자율(%)'),
('상환방법', '금융', 'VARCHAR', 30, NULL, '코드', '원리금균등, 원금균등, 만기일시', '상환 방법 코드'),
('연체여부', '금융', 'BOOLEAN', NULL, NULL, '논리', 'Y/N', '연체 여부');
-- 통합코드도메인 데이터
INSERT INTO 통합코드도메인 (통합코드도메인명) VALUES
('대출구분');
-- 통합코드도메인유효값 데이터
INSERT INTO 통합코드도메인유효값 VALUES
('대출구분', 'CREDIT', '신용대출'),
('대출구분', 'COLLATERAL', '담보대출'),
('대출구분', 'LEASE', '전세자금대출');
-- 표준단어 데이터
INSERT INTO 표준단어
(표준단어명, 단어영문약어명, 단어영문정식명, 분류단어여부, 단어설명)
VALUES
('대출', 'Loan', 'Loan', 0, '대출'),
('계약', 'Contract', 'Contract', 0, '대출 계약'),
('금리', 'Rate', 'Interest Rate', 0, '대출 이자율'),
('상환', 'Repayment', 'Repayment', 0, '대출 상환'),
('연체', 'Delinquency', 'Delinquency', 0, '연체'),
('고객', 'Customer', 'Customer', 1, '고객 정보'),
('상품', 'Product', 'Product', 1, '상품 정보'),
('원리금', 'PrincipalAndInterest', 'Principal and Interest', 0, '대출 원금과 이자 합산 금액'),
('균등상환', 'EqualRepayment', 'Equal Repayment', 0, '같은 금액을 정기적으로 상환하는 방법'),
('신용', 'Credit', 'Credit', 0, '신용'),
('담보', 'Collateral', 'Collateral', 0, '담보'),
('전세', 'Jeonse', 'Jeonse', 0, '전세'),
('자금', 'Fund', 'Fund', 0, '자금'),
('여부', 'YesNo', 'Yes or No', 0, '여부');
-- 일반단어 데이터
INSERT INTO 일반단어 (표준단어명) VALUES
('대출'),
('계약'),
('금리'),
('상환'),
('연체');
-- 분류단어 데이터
INSERT INTO 분류단어 (표준단어명, 도메인그룹명) VALUES
('대출', '금융'),
('계약', '금융'),
('금리', '금융'),
('상환', '금융'),
('연체', '금융'),
('고객', '고객관리'),
('상품', '상품관리');
-- 표준용어 데이터
INSERT INTO 표준용어
(표준용어명, 표준도메인명, 용어영문명, 용어영문정식명, 용어설명)
VALUES
('신용대출', '대출구분', 'Credit Loan', 'Unsecured Loan', '신용 기반 대출'),
('담보대출', '대출구분', 'Collateral Loan', 'Secured Loan', '담보 기반 대출'),
('전세자금대출', '대출구분', 'Lease Loan', 'Jeonse Loan', '전세 자금 대출'),
('원리금균등상환', '상환방법', 'Equal Principal & Interest', 'Amortized Repayment', '원리금 균등 상환 방법'),
('연체여부_예', '연체여부', 'Delinquent', 'Loan Delinquency: Yes', '대출금 연체 상태');
-- 표준용어구성 데이터
INSERT INTO 표준용어구성 (표준용어명, 표준단어명, 구성순서) VALUES
('신용대출', '신용', 1),
('신용대출', '대출', 2),
('담보대출', '담보', 1),
('담보대출', '대출', 2),
('전세자금대출', '전세', 1),
('전세자금대출', '자금', 2),
('전세자금대출', '대출', 3),
('원리금균등상환', '원리금', 1),
('원리금균등상환', '균등상환', 2),
('연체여부_예', '연체', 1),
('연체여부_예', '여부', 2);
-- 속성 데이터
INSERT INTO 속성 (엔터티명, 속성명, 표준용어명) VALUES
('대출계약', '계약번호', '신용대출'),
('대출계약', '대출금액', NULL),
('대출계약', '금리', '금리'),
('대출계약', '상환방법', '원리금균등상환'),
('대출계약', '연체여부', '연체여부_예'),
('고객', '고객ID', NULL),
('고객', '이름', NULL),
('고객', '전화번호', NULL);