데이터베이스에 관해 공부를 하던 도중 관계형 DB에서 1:1, 1:N, N:M, 자기 참조 관계 등 다양한 관계 유형이 등장하는 것을 보며 좀 더 명확한 예시를 들며 파악해보고 싶어졌다. 무엇보다 1:1이나 1:N과 같은 관계는 얼추 이해는 가지만 막상 N:M의 관계에 대해서 누가 설명해보라고 하면 막막한 기분이 들어서 이번 기회에 명확히 잡고 넘어가보려고 한다 :)
가장 먼저 1:1 관계는 DB에서 하나의 엔터티(테이블)가 다른 하나의 엔터티와 고유의 관계를 맺고 있는 구조를 의미한다. 다시 말해 1:1 관계는 두 테이블 간의 일대일 매핑을 의미하며, 특정 상황에서 데이터를 분리하거나 보안을 강화하기 위해 사용된다.
위 예시에서는 사용자와 사용자 세부 정보 테이블은 1:1 관계로, 각 사용자 레코드가 하나의 사용자 세부 정보 레코드와 연결된다.
1:N 구조는 관계형 데이터베이스에서 하나의 엔터티나 테이블에서 관계를 맺은 엔터티(테이블)의 여러 객체를 가질 수 있는 구조를 말한다.
1:N 구조에서는 보통 pk - fk를 사용하여 관계를 맺는다.
외래키는 다른 table의 primary key column과 연결되는 table의 컬럼을 의미한다. 즉, 두 테이블을 연결할 때 한 테이블의 외래키가 다른 하나의 테이블의 기본키가 된다.
1:N의 대표적인 예시로는 부서 table과 직원 table의 관계가 있다.
위 예시에서는 부서와 직원 테이블은 1:N 관계로, 하나의 부서에 여러 명의 직원이 소속될 수 있다. 또한 직원 테이블에서 Department ID가 외래키로 사용되며 부서 테이블의 정보가 변경되어도 (ex. 부서명이 달라진다거나..) 직원 테이블은 수정할 필요가 없으므로 DB의 운영 효율성을 증대시킬 수 있다는 장점이 존재한다.
관계형 데이터베이스에서 양쪽 entity 모두가 서로에게 1:N 관계를 갖는 구조를 의미한다.
N:M구조에서는 매핑 테이블(Mapping table)이라는 별도의 테이블을 통해 관계를 형성한다. 학생 - 강의 관계를 통해 N:M구조를 파악해보자.
학생과 강의 테이블은 수강 테이블을 통해 N:M 관계로 연결된다. 한 학생이 여러 강의를 수강할 수 있고, 한 강의를 여러 학생이 수강할 수 있다.
추가로 자기 참조 관계란 것도 존재한다. 자기 참조 관계는 테이블이 자기 자신과 관계를 맺고 있는 구조를 의미한다. 이는 주로 계층 구조를 표현할 때 사용된다. 대표적인 사례로는 직원과 관리자 관계가 있다.
이 경우 각 직원은 한 명의 관리자를 가질 수 있으며, 관리자 또한 직원일 수 있다.
위와 같은 관계 유형 이해 과정을 통해 SQL 쿼리문 작성 시에 데이터 구조 파악에 조금 더 도움이 되는 것 같다. 추후에 실무나 프로젝트에서 이를 기반으로 효율적인 데이터베이스 설계와 데이터 조작을 이어나가고 싶다.
다대다 관계를 처리할 때 성능 문제를 어떻게 해결하나요?