데이터베이스란?
- 데이터의 모음이다.
- 그런데 약속된 규칙에 의해 구조화를 곁들인
- 데이터베이스를 관리하는 시스템을 DBMS라고 한다
- DB 종류에 따라 쿼리 언어가 달라진다
- RDBMS(MySQL, PostgreSQL, SQL Server 등) : SQL 이용
- NoSQL(MongoDB, Redis 등) : 쿼리 말고 함수 같은 것.. (?) 이용
엔터티
- 예를 들어 쇼핑몰 서비스를 만들려고 한다.
- 그러면 회원, 주문, 배송, 물품 등의 엔터티가 필요하다.
- 서비스의 요구사항을 만족시키기 위해 필요한 것!
- 약한 엔터티 : 강한 엔터티 = 화장실 : 집 = 화장실 : 사무실 (뭐 이쯤이려나..)
릴레이션
- 흔히 ‘테이블’로 이해하고 있는 것으로
- 쇼핑몰 데이터베이스 안에 회원 테이블, 주문 테이블, 배송 테이블 이렇게 있는 각각의 테이블을 릴레이션이라 한다.
- NoSQL 데이터베이스에서는 이를 ‘컬렉션’이라고 부른다고 한다.
속성
- 위에서 계속 예를 들고 있는 회원 엔터티로 설명하면
- 우리 서비스의 요구사항에 따라 필요한 [아이디, 이름, 성별, 연령대, 주소, … 등]을 속성이라고 한다.
도메인
- 속성들이 가질 수 있는 값의 집합니다.
- 성별이라면 남 or 여
- 연령대라면 10대, 20대, 30대 등
날짜 타입
- 날짜만 : DATE
- 날짜 + 시간 : DATETIME
- 날짜 + 시간 : TIMESTAMP
- DATETIME과 차이점은 1970-01-01 00:00:01 부터 카운트를 한 값이라고 한다.
- 메모리적으로도 차이가 있는데 DATETIME은 8바이트, TIMESTAMP는 4바이트
문자 타입
- CHAR, VARCHAR
- CHAR : 고정, 4바이트로 선언해두면 어떤 길이의 값을 배정하든 무조건 4바이트다.
- VARCHAR : 가변, 입력된 데이터에 따라 유동적으로 메모리가 변경되어 저장된다.
- 여기서 추가적으로 안 사실 : VARCHAR는 길이 기록용 1바이트가 추가로 같이 저장된다고 한다.
- TEXT, BLOB
- 얘네들은 일단 큰 문자 데이터를 저장할 때 사용
- TEXT는 게시판에 뭐 글을 쓴다거나 뭔가 과연 얼마나 글을 작성할지 가늠이 안가는 그런 곳에 사용하는 것 같다. 프로젝트에서 항상 VARCHAR로 사용했었는데 TEXT를 써야겠다, 앞으로는.
- BLOB은 이미지, 동영상 등 큰 데이터를 저장할 때 사용하는 거라고 한다. 프로젝트 할 때 뭔가 이런 단어를 본 것 같다. 제대로 몰라서 눈에 익혀만 뒀는데. 쨌든 요즘엔 아마존 서비스 S3 같은 호스팅 서비스를 이용해서 서버에 올리고, 우리는 그 서버 링크를 VARCHAR로 DB에 저장해둬서 잘 사용하지 않는다고 한다.
관계
이 부분은 내가 프로젝트 때 사용한 ERD를 바탕으로 설명해야겠다.

- 일대일 관계
- 퍼스널 컬러를 진단하기 위해서 전문가 진단을 했다면 그 결과도 하나일 것이다. 그 이상일 수 없다.
- 일대다 관계
- 고객이 컨설팅을 하기 위한 예약은 여러 번 할 수 있다.
- 고객이 컨설팅에 대한 후기도 여러 개 작성할 수 있다.
- 컨설턴트의 휴무일은 여러 개 일 수 있다.
- 다대다 관계
- 고객은 여러 컨설턴트를 만날 수 있고, 컨설턴트도 여러 고객을 만날 수 있다.
- 쇼핑몰에서 고객은 여러 상품을 살 수 있고, 상품도 여러 고객에 속할 수 있는 것도 있다.
키
- 기본키
- 일단 기본키부터 설명하면, Primary Key, PK 등 다양하게 부른다.
- 여러 데이터들 중에서 이 기본키를 대면 특정 데이터 하나를 가져올 수 있다.
- 마치 학생 때 25번! 하면 네~ 하던 것처럼
- 이름으로 부르면 키 큰 박태이인지, 키 작은 박태이인지 처럼 중복될 수 있지만
- 기본키로 데이터를 찾으면 무조건 유일한 데이터를 가져올 수 있다.
- 그리고 이 키 하나로 찾아낼 수 있으므로 최소성이라는 특징도 지닌다.
- 25번인 박태이와 26번 박태이라고 복합적으로 부르면 이 역시 특정 데이터를 찾아낼 수는 있지만 최소성을 만족하지 않는다.
- 결론 : 유일성과 최소성을 가지는 여러 키 중에 이걸로 데이터를 찾아내겠다고 결정하면 그게 기본키다.
- 자연키
- 중복되는 값을 모두 제외하고 남은 값을 자연키라고 하는데
- 주민등록번호가 대표적인 예다.
- 하지만 지금은 유일하다고 할지라도 언젠가 변할 수 있다는 속성을 가지고 있다.
- 1947년생과 2047년생의 구분을 위한 추후 조치가 생긴다면.. 변할 수 있다!
- 인조키
- 그래서 우리는 임의로 우리가 키를 만든다.
- 그래서 자연키와 반대되는 용어로 인조키라고 명명했다.
- 고객 테이블이라면 고객이 지정하는 id 외에 개발자가 pk용으로 인조키를 만들어서 새롭게 엔터티가 생성될 때마다 auto increment 되어 넘버링 할 수 있도록 한다.
- 이를 pk로 사용한다.
- 외래키
- 다른 테이블의 pk를 그대로 참조하는 키를 foreign key 라고 한다.
- 예를 들어 위의 erd에서 예약 테이블에 고객 테이블의 pk인 고객_id와 컨설턴트 테이블의 pk인 컨설턴트_id를 사용하는 것과 같다.
- 후보키
- 대체키
- 기본키가 되지 못한 탈락한 키들이다.
- 후보키 = 기본키 + 대체키 요론 느낌