각 테이블들은 서로 연결 될 수 있는데 foreign key라는 개념을 사용해서 연결한다.
한 테이블에 모든 정보를 저장하지 않고 여러 테이블에 나누어 서로 연결하는 이유는 동일한 정보들이 불필요하게 중복되고 잘못된 데이터가 저장되며 비효율적인 디스크 활용을 막기 위해서이다.
연결의 종류에는 크게 one to one, one to many, many to many, 총 3가지의 종류가 있다.
one to one
말그대로 1대1 매칭이 되는 관계이다.
one to many
테이블 A의 로우가 테이블 B의 여러 로우와 연결이 되는 관계이다.
many to many
테이블 A의 여러 로우가 테이블 B의 여러 로우와 연결이 되는 관계이다.
중간의 테이블에 의해 many to many 관계를 형성할 수 있다.
비관계형 Database (NoSQL)
비관계형이기 때문에 데이터들을 저장하기 전에 정의할 필요가 없다.
MongoDB, Redis, Cassandra 등이 대표적인 NoSQL 데이터베이스의 예시이다.
RDBMS v.s. NoSQL
RDBMS
장점:
- 관계형 데이터베이스는 데이터를 더 효율적으로 그리고 체계적으로 저장할 수 있고 관리 할 수 있다.
- 미리 저장하는 데이터들의 구조(테이블 스키마)를 정의 함으로 데이터의 완전성이 보장된다.
- 트랜잭션(transaction)
단점:
- 테이블을 미리 정의해야 함으로 테이블 구조 변화 등에 덜 유연한다.
- 확장성이 쉽지 않다.
- 역시 테이블 구조가 미리 정의 되어 있다보니 단순히 서버를 늘리는것 만으로 확장하기가 쉽지 않고 서버의 성능 자체도 높여야 한다.
- 서버를 늘려서 분산 저장 하는것도 쉽지 않다.
- Scale up (서버의 성능을 높이는것)으로 확장성이 됨.
- 정형화된 데이터들 그리고 데이터의 완전성이 중요한 데이터들을 저장하는데 유리하다.
- 예) 전자상거래 정보. 은행 계좌 정보, 거래 정보 등등.
NoSQL
장점:
- 테이터 구조를 미리 정의하지 않아도 됨으로 저장하는 데이터의 구조 변화에 유연하다.
- 확장하기가 비교적 쉽다. 그냥 서버 수를 늘리면 됨(scale out)
- 확장하기가 쉽고 테이터의 구조도 유연하다 보니 방대한 양의 데이터를 저장하는데 유리하다.
단점:
- 데이터의 완전성이 덜 보장된다.
- 트랜잭션이 안되거나 비교적 불안정하다.
- 주로 비정형화 데이터 그리고 완전성이 상대적으로 덜 유리한 데이터를 저장하는데 유리하다.
- 예) 로그 데이타