5 minute read

참고

  • 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