CREATE TABLE 문에서 간단한 ER 다이어그램을 자동 생성하는 도구를 만들었습니다.

얼마 전 상태 천이도를 자동 생성하는 Pyagram 했다.

개인적으로는 외래 키는 일절 사용하지 않는 파이므로, MySQLWorkbanch를 사용했을 경우에 테이블간의 관계가 붙은 상태의 ER도를 생성할 수 없는 문제가 있었습니다. 그 때문에 외래 키가 없어도 컬럼명으로부터 부모와 자식을 추측해 관련시켜 주는 툴을 만들기로 했습니다.

이용에 있어서 몇가지 제약이 있으므로, 이하를 이해해 주신 후에 사용해 주십시오.
  • MySQL만 대응
  • 기본 키 이름은 항상 id
  • 테이블명은 기본적으로 복수형(중간 테이블을 제외하다)
  • 일부 데이터 유형에는 지원되지 않음 (ENUM 등)

  • 또 검증이 아직 불충분할지도 모르기 때문에, 어쩌면 잘 움직이지 않는 일이 있을지도 모릅니다. 코멘트란인가 Github의 Issue 에 보고 받을 수 있으면 다행입니다.

    다음이 생성된 그림입니다.



    입력 파일로서 다음과 같은 CREATE TABLE 문이 정의된 파일을 준비합니다.
    CREATE TABLE employees (
        id INT(11) NOT NULL AUTO_INCREMENT,
        birth_date DATE NOT NULL,
        first_name VARCHAR(100) NOT NULL,
        last_name VARCHAR(100) NOT NULL,
        gender INT(11) NOT NULL,
        hire_date DATE NOT NULL,
        department_id int(11),
        PRIMARY KEY('id')
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
    
    CREATE TABLE departments (
        id INT(11) NOT NULL AUTO_INCREMENT,
        name VARCHAR(100) NOT NULL,
        PRIMARY KEY('id')
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
    
    CREATE TABLE titles (
        id INT(11) NOT NULL AUTO_INCREMENT,
        name VARCHAR(100) NOT NULL,
        PRIMARY KEY('id')
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
    
    CREATE TABLE employee_title (
        employee_id INT(11) NOT NULL,
        title_id INT(11) NOT NULL,
        from_date DATE NOT NULL,
        to_date DATE NOT NULL,
        PRIMARY KEY('employee_id', 'title_id')
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
    
    CREATE TABLE salaries (
        id INT(11) NOT NULL AUTO_INCREMENT,
        employee_id INT(11) NOT NULL,
        salary INT(11) NOT NULL,
        from_date DATE NOT NULL,
        to_date DATE NOT NULL,
        PRIMARY KEY('id'),
        KEY('employee_id')
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
    

    다음 명령을 실행하면 다이어그램이 생성됩니다.
    pyagram -t {画像タイプ} -o {出力パス} -i {入力ファイル} -f {フォント名} -d erd
    

    또한 다음 명령으로 설치할 수 있습니다.
    pip3 install pyagram
    

    이번 수정을 위해 제작을 크게 바꾸어 플러그 가능한 구현으로 했습니다. Diagram이라는 클래스를 계승하는 것으로, 몇 개라도 그림의 생성 클래스를 만들 수 있게 되어 있습니다.
    Diagram 클래스에는
  • lexical_analysis(자구 해석)
  • syntactic_analysis(파싱)
  • generate_dot(점 파일용 데이터 생성)
  • generate_image(이미지 파일 생성)

  • 의 크게 나누어 4개의 처리가 있습니다만, Diagram를 계승한 클래스에서는 1부터 3까지를 실장하면 좋은 것처럼 만들어지고 있습니다.

    앞으로는 좀 더 출력되는 항목을 늘리거나 대응하는 RDBMS의 종류를 늘리고 싶습니다만, 조금 뼈가 부러지기 때문에 시간을 들여 진행해 나가고 싶습니다.

    좋은 웹페이지 즐겨찾기