1:N 관계 테이블 개념 이해하기
플렉스튜디오에서 회의실 예약이나 프로젝트 관리처럼 큰 틀 하나에 세부 정보가 여러 개 들어가는 앱을 개발할 때, 1:N 관계 테이블 구조는 반드시 이해해야 하는 기본 개념입니다. 그러나 익숙하지 않은 툴로 작업하다 보면 이 구조가 헷갈리거나 어렵게 느껴지는 경우가 많습니다. 이번 시리즈에서는 1:N 관계 테이블 구조를 처음부터 차근히 설명하고, 회의실 예약 앱을 실제로 개발하는 과정을 함께 다룹니다. 이번 글에서는 가장 먼저 1:N 관계 테이블의 개념을 정리합니다.
실무에서 자주 만나는 문제 상황
실제로 고객사로부터 다음과 같은 문의를 받은 사례가 있습니다.
예약 목록을 조회할 때 참석자를 하나로 묶어 표시했더니,
수정 화면으로 넘어가면 참석자들의 고유번호가 전부 예약번호로 바뀌어 누가 누구인지 구분되지 않고 저장도 제대로 되지 않습니다.
이 문제는 예약 데이터와 참석자 데이터 간 연결고리가 끊어진 구조에서 발생합니다. 해결의 핵심은 단순합니다. 부모 테이블의 PK 값(예: 예약번호)을 자식 테이블에 FK로 내려받아 저장하면, 예약번호 1에 참석자 N명이라는 관계가 명확히 유지됩니다. 이 원리를 정확히 이해하면 앞서 언급한 문제는 설계 단계에서 예방할 수 있습니다.
1:N 관계 테이블이란?
두 개의 테이블이 존재한다고 가정하겠습니다.
%201%EB%8C%80N%EA%B4%80%EA%B3%84%ED%85%8C%EC%9D%B4%EB%B8%94/7-1_04_ER%EB%8B%A4%EC%9D%B4%EC%96%B4%EA%B7%B8%EB%9E%A8_DB%EA%B5%AC%EC%A1%B0.jpg?width=800&height=450&name=7-1_04_ER%EB%8B%A4%EC%9D%B4%EC%96%B4%EA%B7%B8%EB%9E%A8_DB%EA%B5%AC%EC%A1%B0.jpg)
① 예약 테이블 (부모)
첫 번째 테이블에는 대회의실, 주간개발 미팅, 예약자: 김태수와 같은 정보가 저장되며, 해당 행의 번호를 42번이라고 하겠습니다.
② 참석자 테이블 (자식)
두 번째 테이블에는 참석자 정보가 저장됩니다. 이때 추가되는 각 행의 예약번호 42는 첫 번째 테이블의 42번 행을 참조합니다. 이 관계가 바로 1:N 관계입니다.
③ ER 다이어그램과 DB 구조
위 구조를 ER 다이어그램으로 표현한 뒤 DB 관점으로 옮기면 다음과 같이 정리할 수 있습니다.
- 예약 테이블 : DataSeq 42번 행이 존재합니다.
- 참석자 테이블 : reservationSeq = 42인 행이 복수로 존재할 수 있습니다.
이때 reservationSeq는 '42번 예약에 속한 참석자'임을 지시하는 연결고리, 즉 외래키(FK) 역할을 수행합니다.
📌 플렉스튜디오 용어 사전
- PK(Primary Key, 기본키) : 각 행을 고유하게 식별하는 값 (예: 예약번호)
- FK(Foreign Key, 외래키) : 다른 테이블의 PK를 참조하여 관계를 형성하는 값 (예: 참석자 테이블의 reservationSeq)
실무에서 자주 활용되는 1:N 관계 구조
1:N 패턴은 회의실 예약에만 국한되지 않습니다. 다양한 업무 시스템에서 폭넓게 활용되며 대표 사례는 다음과 같습니다.
- 프로젝트 관리 : 하나의 프로젝트에 단계별 작업이 N개, 그 하위에 세부 작업이 다시 다수 존재합니다.
- 주문 관리 : 하나의 주문 건에 여러 상품이 포함됩니다. (ex. 장바구니 구조)
- 출장 신청 : 하나의 출장 신청 건에 동행자·일정·경비 내역 등 세부 항목이 복수로 포함됩니다.
결국 큰 틀의 정보 하나에 세부 정보가 여러 개 연결되는 구조를 이해하면 다양한 업무 앱을 설계할 수 있습니다.
%201%EB%8C%80N%EA%B4%80%EA%B3%84%ED%85%8C%EC%9D%B4%EB%B8%94/7-1_06_%EC%8B%A4%EB%AC%B4%EC%82%AC%EB%A1%80_%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EA%B4%80%EB%A6%AC.jpg?width=800&height=450&name=7-1_06_%EC%8B%A4%EB%AC%B4%EC%82%AC%EB%A1%80_%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EA%B4%80%EB%A6%AC.jpg)
이번 시리즈에서 구현할 앱 개요
이번 시리즈에서 구현할 완성 앱의 주요 기능은 다음과 같습니다.
- 예약 목록 화면에서 새 예약 버튼 클릭 시 예약 등록 화면과 참석자 목록 추가 화면이 표시됩니다.
- 하나의 예약에 다수의 참석자를 연결하여 저장·조회·수정이 가능합니다.
%201%EB%8C%80N%EA%B4%80%EA%B3%84%ED%85%8C%EC%9D%B4%EB%B8%94/7-1_01_%EC%99%84%EC%84%B1%EC%95%B1_%EB%AF%B8%EB%A6%AC%EB%B3%B4%EA%B8%B0.jpg?width=800&height=450&name=7-1_01_%EC%99%84%EC%84%B1%EC%95%B1_%EB%AF%B8%EB%A6%AC%EB%B3%B4%EA%B8%B0.jpg)
또한 이번 앱에는 1:N 관계가 두 쌍 포함됩니다.
- 예약 ↔ 참석자 : 하나의 예약에 다수의 참석자를 연결합니다.
- 부서 ↔ 사원 : 부서를 선택하면 해당 부서의 사원 전원을 참석자로 일괄 추가합니다.
이처럼 1:N 관계가 중첩된 구조 역시 플렉스튜디오에서 간결하게 구현할 수 있습니다.
다음 강의 : 1:N 관계 테이블 생성하기
지금까지 1:N 관계 테이블의 개념과 필요성을 살펴봤습니다.
다음 강의에서는 본 글에서 설명한 테이블을 플렉스튜디오에서 직접 생성하는 과정을 다루겠습니다.