관계형 db는 구조화된 데이터들이 하나의 테이블 형식으로 표현이 된다.
마치 엑셀??처럼!
관계형db의 키워들에 대해 알아보자.
데이터 : 각 항목에 저장되는 값.
테이블(relation이라고도 함) : 사전에 정의된 행과 열로 구성되어 있는 체계회된 데이터
필드(or column) : 테이블에서 열을 가리킴
레코드(or tuple) : 테이블에서 한 행의 저장된 정보를 뜻함
키 : 테이블의 각 레코드를 구분할수 있는 값. 각 레코드마다 고유값이어야하며 기본키(primary key)와 외래키(foreign key)등이 있다.
테이블들간에 관계는 이 3가지로 나타낼 수 있다.
1:1
1:N
N:N
테이블의 레코드 하나당 다른 테이블의 한 레코드와 연결된 경우.
각각의 테이블이 있다고 가정.
User테이블에는 유저의 이름과 phone_id라는 외래키(fk)를 지니고 있다.
phonebook테이블에서는 phone_number를 저장하고있는 상태.
말로 잘 풀어내면, 한 개의 전화번호당 한명의 유저를 가지고 한 명의 유저당 한개의 전화번호를 가지고있다.
이런식으로 역이 동일하게 작용한다면,
이 관계는 1:1관계(one-to-one relationship)라고 부른다.
근데 1:1관계는 흔치않다. 위에서 보면 한명의 유저당 한 개의 전화번호를
가진다고하면 그냥 User테이블 하나로 몰아넣어도 되기 때문이다.
결론적으로 굳이?? 테이블을 나눠야할 필요가 있냐 이말이다.
테이블 레코드 하나당 여러개의 레코드와 연결되어있는 경우를 말한다.
한명의 User는 여러개의 전화번호를 가질수 있고,
한개의 전화번호는 한명의 User만 가질 수 있다.
한국말로 잘 풀어보면 얼추 이해가 될거다.
다대다 관계인 경우 1:N 관계가 두개라고 생각하면 된다.
이 경우 이 두 테이블을 연결해주는 테이블이 생기는데 이를 조인테이블이라고 한다.
한 명의 Customer은 여러개의 Customer_package(여행상품)를 가질 수 있고, 한개의 Package(여행상품)는 여러명의 Customer(고객)를 가질 수 있다.
위와같이 가운데의 테이블은 Customer과 Package테이블을 연결해주는 조인 테이블의 역할을 하며,
이 조인테이블을 통해서 어떤 고객이 어떤 패키지상품을 가지고 있는지 또는 반대로 어떤 패키지상품이 어떤 고객들을
가지고 있는지 확인할 수가 있다. 중요한점은 이 조인테이블에도 pk(기본키)가 반드시 존재해야한다.
다대다 테이블의 경우 억지로 쥐어짜내기가 아직 좀 힘들다. 하다보면 익숙해지겠지...