Home » TOOL » DBEAVER » dbeaver foreign key 설정 명령어 없이 간단하게 해 봅시다.

dbeaver foreign key 설정 명령어 없이 간단하게 해 봅시다.

foreign key는 테이블의 특정 필드가, 같은, 혹은 다른 테이블의 필드를 참조하고 있는 것을 말해요. 이 외래키를 dbeaver로 간단하게 설정해 보겠습니다.


Foreign key

[그림 1] 실습 erd 구조

user와 book 테이블이 있어요. 보면, 참조하는 관계가 아무것도 없음을 알 수 있어요. book 테이블에서 author는 작가의 id를 의미합니다.

[그림 2] user 테이블에 있는 레코드들

id가 1, 2인 유저만 있어요. 여기서, book 데이터를 하나 추가해 보겠습니다.

[그림 3] author_id가 7인 레코드를 추가한다.

저자의 id가 7인 책 하나를 추가했더니 잘 동작함을 알 수 있어요. 그런데, 실제로 id가 7인 유저는 없습니다. 고로, 모순되는 관계가 나옵니다. 어떠한 예외 처리도 하지 않고 추가했기 때문입니다. foreign key는 특정 속성 값이, 다른 속성 값을 참고하는 것을 의미합니다.

  • table A의 속성 a가 table B의 속성 b를 참조한다.
  • table A의 속성 a가 table A의 속성 b를 참조한다.

보통 1의 경우가 많지만, 2의 경우도 심심찮게 볼 수 있습니다. 2의 경우를 예로 들면, 대댓글, 카데고리 레벨 등이 있습니다. 이제 실습을 해 보도록 하겠습니다. 그 전에, author_id가 7인 책은 삭제해 주세요.


dbeaver foreign key 설정하기

book의 author_id는, user의 id를 참조하게 할 겁니다. 그러면

  • 참조하는 테이블, 속성은 book의 author_id
  • 참조되는 테이블, 속성은 user의 id

가 됩니다. 먼저, 참조하는 테이블을 클릭해서 properties 탭을 띄웁시다.

그러면 이런 화면이 나옵니다. 밑에 Foreign keys 클릭하겠습니다.

다음, 표 부분에 오른쪽 클릭 해서 메뉴를 엽니다. Create New Foreign Key 클릭합시다. 그러면, Edit foreign key 창이 하나 뜨게 됩니다.


외래 키 추가하기

어떤 정보들을 채워야 하는지 봅시다.

먼저, Reference table가 있어요. 이건 무엇이냐? 참조할 테이블입니다.

  • book의 author_id가
  • user의 id를 참조해야 합니다.

book이 참조할 테이블은 user입니다. (참조 되는 테이블이지요.) 따라서 user를 선택합니다.

Columns에 위와 같이 채워지네요. 저 표가 무슨 의미인가?

  • 1번째 열, 2번째 열에 id, bigserial이 있습니다.
    • 참조하는 테이블 book의 id를 의미합니다. 이것이 어떤 것을 참조하는가?
  • 3번째 열, 4번째 열에 id, bigserial이 있습니다.
    • 참조되는 테이블 user의 id를 의미합니다. (참조대는 대상)

그런데 우리는 book의 id가 아니라 book의 author_id가 user의 id를 참조해야 하는 것이지요?

고로 1번째 Column을 id가 아니라 author_id로 바꿉니다.

다음 On delete와 On Update는 참조되는 대상이 삭제되거나, 업데이트 되었을 때 어떻게 처리할 것인지를 나타냅니다. 이에 대한 것은 나중에 배우도록 합시다. 지금은 Cascade로 연쇄 적용을 하겠습니다. On update도 연쇄 적용으로 갑시다.

확인을 누르면, Foreign keys에 키 하나가 추가되었음을 알 수 있습니다. Save를 눌러, 적용하겠습니다.


이제 무결성 조건을 만족하는지 확인해 보겠습니다. author_id가 7인 책 데이터를 하나 추가하겠습니다.

오류가 떴네요. 왜 그럴까요? Detail에 author_id = 7인 키가 user 테이블에 없었기 때문입니다. 즉, 참조된 테이블 user의 id가 7이 없었기 때문에 추가되지 않은 것입니다.

Leave a Comment

20 + 20 =