상세 컨텐츠

본문 제목

[MySQL, Draw.io] ERD 반자동화 하기

Development Study/잡기술

by yooputer 2024. 12. 17. 13:55

본문

ERD를 그릴 때 Draw.io라는 다이어그램 툴을 사용한다. 

디비버나 워크벤치같은 디비툴에서 그려주는 다이어그램을 사용할까 했는데, 너무 안예뻐서.... 

그냥 내가 직접 노가다로 다이어그램을 그린다. 

 

원래는 테이블 보면서 노가다로 컬럼을 추가했는데, [삽입 > 고급 > SQL] 기능을 발견하고 

오 이거 반자동화 시킬 수 있겠는데? 싶었다. 


삽입 > 고급 > SQL 기능은 아래와 같이 CREATE문으로 ER다이어그램을 그려주는 기능이다. 

 

CREATE문만 잘 작성하면 다이어그램은 프로그램이 그려준다!!!! 


디비버에 DDL을 추출하는 기능이 있는데, 그 기능으로 추출한 INSERT문으로 다이어그램을 그리면 불필요한 정보까지 다 노출된다. 

나는 테이블명, 테이블 주석, 컬럼명, 컬럼 주석만 필요해서 create문을 조회하는 쿼리를 작성하였다. 

SET @schema_name := '스키마명';
SET @table_name := '테이블명';

SELECT concat('CREATE TABLE ', table_name, ' | ', table_comment, ' (')
FROM information_schema.TABLES
WHERE table_schema = @schema_name AND TABLE_NAME = @table_name
UNION ALL 
(SELECT
	concat(
		column_name, 
		' | ', 
		column_comment, 
		CASE WHEN column_key = 'PRI' THEN ' PRIMARY KEY' ELSE '' END, 
		',')
FROM
	(
	SELECT
		table_name,
		table_comment
	FROM
		information_schema.TABLES
	WHERE
		table_schema = @schema_name) t1,
	(
	SELECT
		table_name,
		column_name,
		data_type,
		column_type,
		column_key,
		is_nullable,
		column_default,
		extra,
		column_comment,
		ordinal_position
	FROM
		information_schema.COLUMNS
	WHERE
		table_schema = @schema_name) t2
WHERE
	t1.table_name = t2.table_name
	AND t1.table_name = @table_name
ORDER BY
	t1.table_name,
	ordinal_position)
UNION ALL 
SELECT ')'
FROM information_schema.TABLES
WHERE table_schema = @schema_name AND TABLE_NAME = @table_name;

 

사용자 변수로 스키마명과 테이블명을 선언하고,

information_schema.TABLES 테이블과 information_schema.COLUMNS 테이블을 조회해 컬럼명과 컬럼 주석을 조회하고,

앞 뒤로 CREATE문을 추가하였다. 

 

이걸 디비버에서 실행시킨 후 조회된 row들을 복사하여 [삽입 > 고급 > sql] 클릭 후 입력하면

내가 원하는 형태로 다이어그램이 생성된다! 

관련글 더보기