각 로우에는 고유 키가 있다. primary key를 이용해서 해당 로우를 찾거나 인용하게 된다.
One to One
테이블 A의 로우와 테이블 B의 로우가 정확히 일대일 매칭이 되는 관계
한명의 유저는 하나의 프로파일 관계만 가질 수 있음.
One To Many
테이블 A의 로우가 테이블 B의 여러 로우와 연결이 되는 관계
이 예시는 고객이 여러번의 주문을 할 수 있듯이, 주문은 여러번 생성되지만 주문을 한 고객은 한 명 뿐인 경우에 빗대어 설명할 수 있다. 하나의 주체가 여러 개의 상태값을 가질 수 있는 상태 또한 하나의 카테고리에 여러 제품이 들어가 있는 관계
Many To Many
테이블 A의 여러 로우가 테이블 B의 여러 로우와 연결이 되는 관계
하나의 책에 여러명의 저자가 있는 경우, 작가들은 여러 책을 쓸 수 있는 경우로 빗대어 설명
테이블을 연결하는 방법
테이블과 테이블의 관계를 지을 수 있는게 외래 키(Foreign Key)
테이블을 연결하는 이유
NoSQL은 연결 안해도 된다.
하나의 테이블에 모든 정보를 넣으면 동일한 정보들이 불필요하게 저장됨 이럴 경우 더 많은 디스크를 사용하고 잘못된 정보를 저장할 가능성이 높아진다.
이는 디스크를 더 효율적으로 사용하기 위함이다.
정규화 nomalization : 데이터를 중복해서 저장하지 않고 연관된 속성들을 적절한 엔터리에 배치하기 위해서 데이터 베이스의 테이블을 분할하는 것
트랜잭션
일련의 작업들을 한번의 하나의 unit으로 실행하는 것
작업 수행의 논리적 단위 - 초당 트랜잭션 실행수로 측정
예 ) 친구에게 만원을 송금한다. 내 계좌에서 만원이 빠져나가고 친구의 계좌에 만원이 들어오지 않을 경우 만원은 공중으로 증발된다. 이럴 경우를 대비하여 실행이 중간에 오류가 발생하면 수행은 중단되고 다시 처음부터 실행하도록 하는 것이다.
commit & rollback
ACID
원자성, 일관성, 고립성, 지속성 원자성 Atomicity : 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것 일관성 Consistency : 데이터의 타입이나 상태가 중간과정에서 변질되지 않는 것을 의미 고립성 Isolation : 트랜잭션 수행 시 다른 트랜잭션 작업이 끼어들지 못하도록 보장하는 것을 의미. 지속성 Durability : 성공한 트랜잭션은 영원히 반영되어야 함을 의미
비관계형 데이터베이스 NoSQL 데이터베이스
비관계형 타입의 데이터를 저장할 때 주로 사용되는 데이터베이스 시스템
관계형과는 다르게 데이터를 저장하기 전에 정의할 필요가 없다.
빠른 속도로 사용하기 위해 비관계형 데이터베이스를 사용함
MongoDB, Redis, Cassandra ...
SQL(RDBMS) vs NoSQL
SQL 장점
관계형 데이터 베이스는 데이터를 더 효율적이고 체계적으로 저장, 관리할 수 있다.
미리 저장하는 테이블들의 구조를 정의함으로서 데이터의 완전성이 보장된다.
트랜잭션
단점
테이블 구조 변화에 덜 유연하다.
확장성이 어렵다.(구조가 미리 정의 되어 있기 때문..서버를 늘려서 분산 저장하는 것도 어려움)
정형화된 데이터들, 데이터의 완전성이 중요한 데이터들을 저장하는데 유리하다 예)전자상거래 정보, 은행계좌정보, 거래정보...
NoSQL 장점
데이터 구조를 미리 정의하지 않아도 됨으로 데이터 구조 변화에 유연하다
확장하기 쉽다. 서버수를 늘리면 됨(scale out)
확장이 쉽고 구조도 유연하다 보니 방대한 양의 데이터를 저장하는데 유용하다.
단점
데이터의 완전성이 덜 보장된다
트랜잭션이 안되거나 불안정
주로 비정형화 데이터, 완전성이 상대적으로 덜 유리한 데이터를 저장하는데 유리하다 예)로그 데이터(누가 어디서 어느 사이트에 언제 어떤 루트를 통해 접속하고 어떤 행위를 하였는지가 남는 기록)