dbeaver에서 데이터베이스로부터, erd로 1분만에 떨어트리는 방법을 알아봅시다.

 


 

 이전에 도서관 토이 프로젝트를 했었습니다. 거기서 library 데이터베이스를 생성했고, 3개의 테이블을 이용했는데요. erd 다이어그램으로 떨어트려 보겠습니다. 마우스 오른쪽 우클릭 후, Create 탭의 Other를 눌러보겠습니다.

 

 

 DBeaver를 눌러보면, ER 다이어그램이 하나 나오는데요. 이것을 클릭하겠습니다.

 

 

 저는, library 데이터베이스에서, book, borrow, user 이렇게 3개의 테이블을 생성했는데요. 각각 책, 빌린 사람들, 그리고 유저 목록을 나타냅니다. 저는 이 중, 테이블 3개를 선택 할 겁니다. 제 토이 프로젝트에서 사용했던 것들이기 때문입니다. 이제, 확인을 누르시면, 잠시 후에 erd 다이어 그램이 나타납니다.

 

 

 책 테이블에는 책 이름과 책 카데고리가 있습니다. 그리고 user에는 유저 정보가 있긴 합니다. 뭔가 borrow 테이블에서 book_id를 fk로 쓸 거 같고, user_id도 fk로 쓸 거 같은데 별다른 화살표라던지 연결 표시가 없네요. 실제로 borrow 테이블의 메타 정보를 보면 다음과 같이 되어 있습니다.

 

 

 참조 키인 FK에는 아무 것도 없습니다. 그러면 user_id와 book_id는 어떻게 되어 있을까요?

 

 

 확인해 보니, 단순 인덱스로 되어 있었습니다. user id는 unique 하지 않습니다. 왜냐하면, 한 사람이 책을 여러권 빌릴 수 있기 때문입니다. 지금 와서 보니, book id는 왜 unique 처리를 하지 않았는지 의문이긴 하네요. 아무튼, dbeaver로 erd를 떨어트리는 방법은 그리 복잡하지 않게 할 수 있었습니다. 심지어, 보여줄 테이블, 뷰만 선택할 수도 있습니다. dbeaver 공식 문서에 따르면, IDEF1X를 디폴트로 쓴다고 하는데요. 찾아보면 도움이 되실 듯 싶어서 이것도 링크를 남겨 놓겠습니다.

 

 제가 한 토이 프로젝트는 간단한 구조였고요. 조금 더 복잡한 것은 어떨까요?

 

 


 

 장고에서 auth 관련 테이블들을 dbeaver로 erd를 그리면 위와 같이 나옵니다. 뭔가 처음 보는 점선들이 있는데요. 이들을 하나씩 눌러봅시다.

 

 

 먼저, auth_group_permission과 auth_group을 잇는 점선을 눌러보면, Properties가 나옵니다. Type이 외래키라고 적힌 것을 보아서는 테이블에 있는 모 필드가 다른 테이블에 있는 특정한 무언가를 참조하는 것을 의미합니다. auth_group_permissions라는 테이블이 있는데요. 이것은 그룹이 받은 퍼미션을들 의미합니다.

 

 그러면, 이 테이블에 group_id가 있고, auth_group에도 group_id가 있는데요. auth_group_permission에서 그룹에 대한 정보와 그룹이 받은 퍼미션에 대한 정보를 가져와야 하니, auth_group_permission의 group_id가 auth_group의 id를 참조할 거라는 합리적인 추론을 할 수 있습니다. 정말 그럴까요?

 

 

 네. 정말 그렇습니다. 실제로, auth_group_permission 테이블의 Foreign keys를 보면, 2개가 걸려있음을 알 수 있어요.

 

 

 유저와 그룹에 대한 정보는 어떻게 저장하고 있을까요? 유저가 속할 수 있는 그룹은 여러개입니다. 그리고 그룹 또한 여러 명의 유저를 가질 수 있습니다. 즉, 유저와 그룹은 N:M, 다대다 관계입니다. 이를 auth_user_groups라는 mapping으로 연결했음을 알 수 있어요. 그렇다면, auth_user_groups의 user_id는 auth_user의 id를 참조하고, auth_user_groups의 group_id는 auth_group의 id를 참조할 듯 합니다. mapping table에서는 자주 보이는 구조인데요. 정말 그런지 확인해 봅시다.

 

 

 auth_user_groups에 걸려 있는 2개의 외래키를 봅시다. Referenced Column을 보면, 참조된 컬럼을 볼 수 있습니다. 4번째 컬럼의 auth_group_pkey는 auth_group의 primary key를, auth_user_pkey는 auth_user의 primary key를 의미합니다.

 

 

 작업한 erd는 png 등으로 저장할 수 있습니다.