데이터베이스는 크게 관계형 데이터베이스와 비관계형 데이터베이스로 나눌 수 있습니다.
그 중 관계형 데이터베이스에 대해 알아보겠습니다.
데이터 사이의 관계에 기초를 둔 데이터베이스 시스템
관계형 데이터에서 모든 데이터는 2차원의 테이블로 표현할 수 있는데, 아래 예시를 통해 확인해 보겠습니다.
id
, 책 제목
, 작가
, 출판사
, 가격
갈매기의 꿈
, 리처드 바크
, 나무옆의자
, 11,520
각 Row는 언제나 고유한 번호를 갖고 있습니다. 이를 고유 키(Primary Key)라고 합니다.
예를 들어 개미
라는 책은 id가 4인 데이터
라고 표현할 수 있는데, 이 때 개미의 Primary Key는 4입니다.
Primary Key를 통해 특정 로우를 찾거나, 인용할 수 있습니다.
테이블끼리 연결에는 총 3가지의 종류가 있습니다.
위와 같이 한 사람이 단 한 개의 주민등록번호를 가질 수 있는 것처럼 일대일 관계가 그러합니다.
각각의 데이터들이 서로 하나씩만 연결된 경우, 해당 테이블 사이의 관계를 일대일관계라고 부릅니다.
위 테이블을 하나의 테이블로 표현한다면 아래와 같을겁니다.
하지만 이처럼 표현한다면 같은 이름들을 중복해서 저장하여 불필요한 메모리를 사용할 수 있습니다.
따라서 user
란에 이름을 직접 저장하기 보다 user_id
를 저장하였습니다.
그리고 이를 참조한다
라고 표현합니다.
Identification numbers 테이블의 user 컬럼은 users 테이블의 id(pk)를 참조한다.
pk를 참조한 칼럼에 입력되어있는 숫자는 Foreign Key
또는 외래키
라고 합니다. Indentification numbers 테이블의 user_id
는 모두 KF
라고 부를 수 있습니다.
이러한 상황을 도식화 하면 아래처럼 나타낼 수 있습니다.
📌 테이블 Users와 테이블 Indentification은 서로 일대일 관계이다. 라고 표현합니다.
한 테이블의 로우 하나가 다른 테이블 의 여러 로우와 연결이 되는 관계를 말합니다.
User 테이블 로우 하나는 Pets 테이블의 여러 로우와 연결.
Pets 테이블의 로우 하나는 User 테이블의 로우 하나와 연결.
1:N
이라고도 표현하고 아래와 같이 도식화 할 수 있습니다.
📌 테이블 users와 테이블 pets은 서로 일대다 관계이다. 라고 표현합니다.
한 테이블의 여러 로우가 다른 테이블의 여러 로우와 연결이 되는 관계입니다.
가령 책과 책 작가 사이의 관계가 그러합니다.
하지만 데이터베이스는 여러 데이터를 넣을 수 없어서 테이블의 행 하나에는 딱 하나의 데이터만 들어가야 합니다.
authors
컬럼에 해당하는 로우 하나에 여러 데이터가 들어가있기 때문에 정규화 제 1법칙
을 위반합니다.
행 하나에 하나의 데이터만 넣어 테이블을 다시 만들자면 아래와 같습니다.
작가의 이름, 책 제목, 가격이 중복됩니다.
이럴 경우 똑같은 데이터를 여러 번 저장해 주어야 하는 문제가 발생하는데, 이러한 문제는 Foreign Key
로 중복된 데이터를 줄여 해결할 수 있습니다.
📌 테이블 author와 테이블 books는 서로 다대다 관계이다. 라고 표현합니다.
Foreign Key
를 사용하여 주로 연결합니다.
동일한 정보들이 불필요하게 중복되어 저장되면 더 많은 디스크를 사용하게 되고, 잘못된 데이터가 저장될 가능성이 높아집니다.
만약 고객의 아이디는 동일한데 이름이 서로 다른 로우가 있다면 테이블을 나누어서 저장한 후 필요한 테이블끼리 연결시켜 문제를 해결할 수 있는데,
normalization 정규화
라고 합니다.