오늘은 데이터 관계 유형 중 일대다(One To Many)에 대해 알아보겠습니다. 데이터의 일대다 관계라고 하면 대표적으로 고객의 쇼핑이 있을 수 있습니다. 더 알기 쉽게는 온라인 쇼핑이라고 할 수 있겠네요.
" 한명의 고객이 - 여러가지 상품을 주문 "
으로 한줄 요약해 볼 수 있을 것 같습니다. 주문을 처리할때 마다 전체 고객정보를 전부 들고 온다음 해당되는 고객의 주문을 입력하면 엄청난 비효율이 생길 것 입니다. 따라서 따로 존재하는 테이블을 연결해서 주문한 고객의 정보만 불러올 수 있도록 해보겠습니다.
예를 들어 다음과 같은 경우 주문한 고객 수는 2명 뿐인데 고객 데이터를 전부 들고 오게됩니다. 이를 해결하려면 고객 정보와 주문 정보를 따로 저장하고 주문에 해당하는 고객정보만 가지고 오면 됩니다.
FOREIGN KEY (해당 칼럼) REFERENCES 참조테이블(칼럼)
다음과 같이 고객 데이터와 주문 데이터를 따로 분류한 후 특정 칼럼을 통해 두 테이블을 연결하겠습니다.
고객 테이블과 주문 테이블을 따로 생성한 후 고객 테이블의 id값을 주문 테이블의 customer_id가 참조하도록 했습니다.
이렇게 하면 고객 테이블에 아이디 정보가 없는 경우 주문 테이블에 추가 할 수 없고, 상응하는 고객 아이디가 고객 테이블에 있어야 주문 추가가 가능합니다.
다음과 같이 고객 데이터에 정보를 추가 할때 아이디 값이 고객 테이블에 있는값이면 정상적으로 입력되고, 고객 테이블에 없다면 추가되지 않는 것을 볼 수 있습니다.
SELECT (칼럼명) FROM (테이블명1) JOIN (테이블명2) ON (조건);
앞서 두 테이블을 연결했음으로 두 테이블에서 해당되는 내용만 추려서 볼 수 있습니다. 예를들어 특정 고객의 아이디만 가지고 그 고객의 주문 내용을 보거나, 고객의 이름으로 주문 내용을 볼 수 있습니다.
주문 마다 고객 정보를 전부 불러오는 것이 아닌, 주문한 고객의 정봉만 불러오도록 한다면 JOIN 명령은 다음과 같습니다.
다음과 같이 주문을 하지 않은 David Bowie나 Blue Steele의 정보를 불러오지 않고 주문 정보와 주문한 고객의 정보만 불러왔음을 알 수 있습니다.