GTFS의 데이터 구조를 ER 다이어그램에서 개관

GTFS Advent Calendar 6일째의 기사입니다.
오늘은 RDBMS에서 ER 다이어그램을 작성하는 기능을 응용하여 GTFS 데이터의 구조를 조금 보기 쉽게 하는 방법을 소개하겠습니다.

GTFS 사양에서 데이터 관련



GTFS 사양은 각 CSV 내의 필드 간의 관계를 보여주는 다이어그램을 보여줍니다 (아래 PDF 파일의 5 페이지).

  • 정적 버스 정보 포맷(GTFS-JP) 사양서(제2판)(2019년 3월 27일) (PDF 파일)



  • 예를 들어 항공편 정보(trips.txt)라면 route_idservice_id , shape_id 와 같은 필드가 다른 CSV 파일 내의 필드와 연결되어 있는 것을 알 수 있습니다.

    이 연결 정보를 활용하고, RDBMS에서의 테이블 정의시에 외부 키로서 필드 정의하는 것으로, ER도등등으로 각 GTFS데이터간의 관련을 보기 쉽게 해 보려고 생각합니다.

    GTFS 테이블 정의 및 ER 다이어그램 작성



    우선은 테이블 정의입니다. 테이블과 (완전하지는 않지만) 필요한 외래 키 정의를 포함하는 SQL 파일을 아래에 준비했습니다. 그렇다고 해도 둘째 날 기사 에서의 환경 구축시에 이 SQL을 실행하고 있으므로, 벌써 Docker 이미지내의 MySQL에는 정의가 들어간 상태가 되어 있습니다.
  • ValLaboratory/advcal/2019/gw/docker_env/docker/gtfs_db/script/gtfs_reference.sql

  • 다음은이 테이블 정의에서 ER 다이어그램을 작성해 보겠습니다. MySQL에는 MySQL Workbench 이라는 GUI 툴이 있어, 이 툴이 제공하는 기능의 하나로 테이블 정의로부터 ER 다이어그램을 작성한다고 하는 것이 있습니다.

    바로 ER 다이어그램 작성 기능을 사용해 봅시다.
    MySQL Workbench에서 GTFS 데이터가 저장된 DB에 연결한 상태에서 다음 단계를 수행합니다.

    홈 화면에서 "Models"-"Create EER Model from Database"를 선택합니다.



    ER 다이어그램을 작성할 데이터베이스는 gtfs_db_reference를 선택합니다.
    ( gtfs_reference.sql 에서 테이블 정의를 만든 DB입니다)



    그리고는 다이얼로그의 오른쪽 하단에 있는 "Next"버튼을 눌러 가는 것만으로 OK입니다.

    그러면 다음과 같은 느낌으로 ER 다이어그램이 생성됩니다. 테이블 정의에 마우스 커서를 맞추면 기본 키 및 외래 키로 되어 있는 필드가 각각 청색과 녹색으로 표시되어 어느 테이블과 관련되어 있는지 파악하기 쉬워집니다.



    실제로 이러한 외래 키 설정이 있는 상태에서 GTFS 데이터를 DB에 투입하려고 하면, 제약이 너무 엄격해 에러가 되어 버리는 경우가 있습니다(원래 데이터의 단계에서 ID가 되는 레코드가 중복해 있을 수도 있다). 그 때문에, 우선은 제약을 붙이지 않는 상태의 테이블을 정의해 이용하는 것이 좋을 것 같습니다.
    ( 둘째 날 의 기사에서 소개한 RDBMS 환경에서 gtfs_dbgtfs_db_reference 라고 하는 2 개의 DB 를 준비하고 있는 것은 이 때문입니다)

    요약



    GTFS 테이블 정의에 외래 키 설정을 추가하고 RDBMS 도구와 연동시켜 ER 다이어그램을 생성해 보았습니다.

    미리 외래 키라고 하는 형태로 테이블간의 관련을 정의해 둘 필요가 있어, 그것이 조금 번거롭지만, GTFS에 대해서는 최초로 어느 정도 테이블 정의와 외래 키의 관련을 기재한 SQL을 준비해 두고, 사양의 추가·변경에 따라 리파인먼트하도록 해 두면, 나중에 GTFS의 사양을 이해하려고 하는 사람의 도움이 될 것 같은 생각이 듭니다.

    좋은 웹페이지 즐겨찾기