메타관리
참고
- https://kingsurvival.tistory.com/37
메타관리 테이블
CREATE TABLE TB_CODE_MA (
`CD_ID` CHAR(3) NOT NULL COMMENT '코드식별자',
`CD_COL_NM` VARCHAR(50) NOT NULL COMMENT '코드컬럼명',
`CD_KRN_NM` VARCHAR(100) NOT NULL COMMENT '코드컬럼한글명',
`CD_DFN` VARCHAR(50) NOT NULL COMMENT '코드내용',
`USE_YN` CHAR(1) NOT NULL COMMENT '사용여부',
PRIMARY KEY (`CD_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='테이블코드마스터';
CREATE TABLE `TB_CODE_DT` (
`CD_ID` char(3) NOT NULL COMMENT '코드식별자',
`CD_NM` varchar(50) NOT NULL COMMENT '코드명',
`CD_VAL` varchar(10) NOT NULL COMMENT '코드값',
`CD_VAL_DFN` varchar(50) NOT NULL COMMENT '코드값내용',
`CD_ORD_SEQ` int(11) NOT NULL COMMENT '코드정렬순서',
`USE_YN` char(1) NOT NULL COMMENT '사용여부',
PRIMARY KEY (`CD_ID`,`CD_VAL`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='테이블코드상세마스터';
서버 명명규칙
메타
-- 회사
SELECT *
FROM TB_CODE_MA T1
INNER JOIN TB_CODE_DT T2 ON T1.CD_ID = T2.CD_ID
WHERE T1.CD_ID = '008';
-- 서버종류
SELECT *
FROM TB_CODE_MA T1
INNER JOIN TB_CODE_DT T2 ON T1.CD_ID = T2.CD_ID
WHERE T1.CD_ID = '005';
-- 서버형태
SELECT *
FROM TB_CODE_MA T1
INNER JOIN TB_CODE_DT T2 ON T1.CD_ID = T2.CD_ID
WHERE T1.CD_ID = '006';
-- 운영체제(OS) + SEQ(순서)
SELECT *
FROM TB_CODE_MA T1
INNER JOIN TB_CODE_DT T2 ON T1.CD_ID = T2.CD_ID
WHERE T1.CD_ID = '014';
설명
❗GG_WEB_ISP_L01(구글 웹서버 인터넷회선 리눅스서버)
💡 0.대문자 사용 권장.💡 1.첫 자리(2) 회사
# DM(다음커뮤니케이션) # TS(티스토리) # NR(네이버) # GG(구글) TS
💡 2.둘째 자리(3) 서버종류
# WEB(웹서버) # DBS(데이터베이스) # ITF(인터페이스) # MNG(관리) # DNS(도메인) # BAC(백업) TB_WEB
💡 3.셋째 자리(2) 서버형태
# DED(데디케이트) # AWS(아마존 클라우드) # ORA(오라클 클라우드) # ISP(인터넷 회선) TB_WEB_AWS
💡 4.넷째 자리(2) 운영체제(OS)+SEQ(순서)
# W01(윈도 서버) # L01(리눅스 서버) TS_WEB_AWS_L01 (티스토리 웹 아마존 리눅스 서버)
❗TS_WEB_AWS_L01(티스토리 웹 아마존 리눅스 서버)
💡 톰켓, 아파치로 웹 서버를 서비스하고 있음을 알 수 있다.❗TS_ITF_AWS_L02(티스토리 인터페이스 아마존 리눅스 서버)
💡 rest api이나 인터페이스를 서비스를 구축해야 할 땐 위와 같이 사용할 수 있다.
데이터베이스 명명규칙
매타
SELECT *
FROM TB_CODE_MA T1
INNER JOIN TB_CODE_DT T2 ON T1.CD_ID = T2.CD_ID
WHERE T1.CD_ID = '008';
설명
❗BCK_D_WB_PGS(블렝 개발 웹 오라클)
💡 0.대문자 사용 권장.💡 1.첫 자리(2) 회사코드
# DM(다음커뮤니케이션) # TS(티스토리) # NR(네이버) # GG(구글) BCK
💡 2.둘째 자리(2) 용도코드
# T(테스트) # D(개발) # O(운영) 또는 P, R # B(백업) # P(임시) # D(기본) BCK_O
💡 3.셋째 자리(2) 업무코드
# WB(웹사이트) # BG(블로그) # WK(작업) # SP(쇼핑몰) BCK_O_WB
💡 4.넷째 자리(3) DB종류코드
# ORA(오라클) # PGS(포스트 그래스) # MSS(엠에스 에스큐엘) # MYS(마이에스큐엘) # SLL(에스큐엘 라이트) # TRD(테라데이터) BCK_O_WB_ORA
💡 4.다섯째 자리(2) SEQ
# 회사 / 업무 / 용도가 같은 다른 프로젝트가 존재 가능성 # 01 02 03 ... BCK_O_WB_ORA_01
요약
TS_T_WB_PGS(티스토리 테스트 웹 포스트 그래스)
- TS(티스토리)
- T(테스트)
- WB(웹)
- PGS(포스트 그래스)
배포환경별 예시
TS_D_WB_PGS(티스토리 개발 웹 포스트 그래스)
TS_T_WB_PGS(티스토리 테스트 웹 포스트 그래스)
TS_O_WB_PGS(티스토리 운영 웹 포스트 그래스)
테이블 명명규칙
메타
-- 테이블성격
SELECT *
FROM TB_CODE_MA T1
INNER JOIN TB_CODE_DT T2 ON T1.CD_ID = T2.CD_ID
WHERE T1.CD_ID = '009';
-- 업무
SELECT *
FROM TB_CODE_MA T1
INNER JOIN TB_CODE_DT T2 ON T1.CD_ID = T2.CD_ID
WHERE T1.CD_ID = '002';
-- 업무모듈
SELECT *
FROM TB_CODE_MA T1
INNER JOIN TB_CODE_DT T2 ON T1.CD_ID = T2.CD_ID
WHERE T1.CD_ID = '010';
-- 테이블 용도
SELECT *
FROM TB_CODE_MA T1
INNER JOIN TB_CODE_DT T2 ON T1.CD_ID = T2.CD_ID
WHERE T1.CD_ID = '011';
설명
❗TB_WB_FL_HS(일반테이블 웹사이트 파일 히스토리)
💡 0.대문자 사용 권장.💡 1.첫 자리(2) 테이블성격
# TB(일반테이블) # TP(임시테이블) # TU(백업테이블) # TI(인터페이스테이블) # TR(참고테이블) # TS(샘플테이블) # 이외의 객체는 아래와 같이 생성한다. # VW(뷰) # SQ(시퀀스) # FK(포링키) # PK(프라이머리키) # IX(인덱스) TB
💡 2.둘째 자리(2) 업무코드
# WB(웹사이트) # BG(블로그) # WK(작업) # SP(쇼핑몰) # RP(레포트) # DW(통계or마트) # OD(주문) TB_WB
💡 3.셋째 자리(2) 업무모듈코드
# CU(고객) # OR(조직) # BD(게시판) # EX(엑셀관련) # FL(파일) # BA(배치) # SY(시스템작업) # DC(문서작업) # 그 외 정의해서 사용도 가능 TB_WB_FL
💡 4.넷째 자리(2) 테이블용도코드
# MA(마스터) # SB(서브) # HD(헤더) # DT(상세) # HS(히스토리) # MP(맵핑) # SB(서브) # LG(로그) # 중첩될 경우 SEQ 시퀀스로 표기한다. 01 ~ ZZ > TB_WB_FL_HS
요약
아래와 같이 테이블 명명규칙을 적용할 수 있다.
SELECT (SELECT CD_NM FROM TB_CODE_DT WHERE CD_ID = '009' AND CD_VAL = 'TB') AS '테이블성격코드' -- 일반
, '_' AS ''
, CONCAT(
(SELECT CD_NM FROM TB_CODE_DT WHERE CD_ID = '002' AND CD_VAL = 'WB')
,(SELECT CD_NM FROM TB_CODE_DT WHERE CD_ID = '010' AND CD_VAL = 'CU')) AS '업무+업무모듈코드' -- 웹사이트 + 고객
, '_' AS ''
, (SELECT CD_NM FROM TB_CODE_DT WHERE CD_ID = '011' AND CD_VAL = 'MA') AS '테이블용도코드' -- 마스터
❗TB_ODCU_MA (일반테이블쇼핑몰고객마스터) (성격_업무+업무모듈코드_용도)
💡 1.TB(일반테이블) 💡 2.SP(쇼핑몰)+CU(고객) 💡 3.MA(마스터)
업무를 뺀 아래와 같이 규칙을 정할수도 있다.
예를들면 고객마스터 같은경우 회원가입 , 로그인, 상품주문, 개인정보변경 등 다양한 곳에 쓰이기 때문에 아래와 같이 쓰는게 더 좋은 규칙이라 할 수 있다.
SELECT (SELECT CD_NM FROM TB_CODE_DT WHERE CD_ID = '009' AND CD_VAL = 'TB') AS '테이블성격코드' -- 일반
, '_' AS ''
, (SELECT CD_NM FROM TB_CODE_DT WHERE CD_ID = '010' AND CD_VAL = 'CU') AS '업무모듈코드' -- 고객
, '_' AS ''
, (SELECT CD_NM FROM TB_CODE_DT WHERE CD_ID = '011' AND CD_VAL = 'MA') AS '테이블용도코드' -- 마스터
❗TB_CU_MA (일반테이블고객마스터)(성격_업무모듈코드_용도)
💡 1.TB(일반테이블)
💡 2.CUST(사용자)
💡 3.MA(마스터)
1. 성격_업무+업무모듈코드_용도
2. 성격_업무+업무모듈코드_용도_SEQ
정리하면
위 규칙을 따르는게 좋지만
특수한 경우는 업무와 업무모듈코드를 한 단어로 등록하여 묶어서
아래처럼 표현하는 것이 효율적이다.
1. TB_ORDR_HD(일반테이블주문헤더) ==> TB_ORDR_DT(일반테이블주문상세)
2. TB_ORAD_HD(일반테이블관리자주문헤더) ==> TB_ORAD_DT(일반테이블관리자주문상세)
응용하기 : 쿠폰 테이블 생성해보기
STEP1. 테이블생성
-- STEP1. 메타 테이블에서 적절한 구조를 확인
SELECT (SELECT CD_VAL FROM TB_CODE_DT WHERE CD_ID = '009' AND CD_VAL = 'TB') AS '테이블성격'
, (SELECT CD_VAL FROM TB_CODE_DT WHERE CD_ID = '002' AND CD_VAL = 'BCK') AS '업무'
, (SELECT CD_VAL FROM TB_CODE_DT WHERE CD_ID = '010' AND CD_VAL = 'CP') AS '업무모듈코드'
, (SELECT CD_VAL FROM TB_CODE_DT WHERE CD_ID = '011' AND CD_VAL = 'MA') AS '테이블용도코드'
, '001' AS SEQ
-- STEP2. TBBCKCPMA001 으로 결정
-- STEP3. 생성
CREATE TABLE TBBCKCPMA001 (
ID BIGINT AUTO_INCREMENT PRIMARY KEY,
CODE VARCHAR(255) NOT NULL,
USED TINYINT(1) NOT NULL DEFAULT 0,
DISCOUNT DECIMAL(10, 2) NOT NULL,
EXPIRATION_DATE DATE NOT NULL,
CREATE_AT DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
UPDATE_AT DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
MEMBER_ID VARCHAR(9)
);
STEP2. 임시 테스트 데이터 삽입
INSERT INTO TBBCKCPMA001 (CODE, USED, DISCOUNT, EXPIRATION_DATE, MEMBER_ID) VALUES
('ABC123XYZ', FALSE, 10.0, '2024-12-31', 'member001'),
('DEF456UVW', FALSE, 20.0, '2024-11-30', 'member002'),
('GHI789RST', TRUE, 15.0, '2023-12-31', 'member003'),
('JKL012MNO', FALSE, 5.0, '2025-01-15', 'member004'),
('PQR345STU', TRUE, 25.0, '2024-06-30', 'member005');
Leave a comment