관계형 데이터베이스 RDBMS
에서는 테이블 Table
, 레코드 - 테이블 - 데이터베이스
구조NoSQL 데이터베이스
에서는 컬렉션 Collection
, 도큐먼트 - 컬렉션 - 데이터베이스
구조나이
속성이 가질 수 있는 값 = {1,2,3,4, ... , 100, 101, ...}성별
속성이 가질 수 있는 값 = {남성, 여성}회원
이라는 릴레이션
에 이름, 아이디, 회원번호, 성별, 나이
등의 속성
을 가질 수 있고, 나이
속성은 {남성, 여성}
이라는 도메인
을 가질 수 있다.id | account_name | address | gender | created_at | |
---|---|---|---|---|---|
1 | 장윤서 | younseojj@gmail.com | 서울 | 여성 | 2022-12-23-23:12:38 |
2 | 정성우 | anfrosus@naver.com | 서울 | 남성 | 2023-01-12-01:43:49 |
테이블
로 이름, 이메일, 주소, 성별 등의 속성
을 가지고 있으며 account_name, email, address, gender 등의 필드
를 가진다. 어떤 속성이 올 수 있지 ? -> 이름, 이메일, 주소, 성별, 가입 날짜 등
이 엔터티를 데이터베이스에 넣어서 테이블로 만들려면 ?
속성 마다 맞는 타입
을 지정해주어야 하겠구나!
타입
은 DB마다 조금씩 다르다. 오늘은 MySQL을 기준으로!
보통 한글로 속성이름을 사용하지 않는다. 회원 이름은 account_name, 성별은 gender 등으로 영어이름에 매핑해서 사용한다.
위의 회원 테이블을 MySQL로 구현하려면 다음과 같은 코드를 작성해야 한다.
CREATE TABLE ACCOUNT(
ID INT NOT NULL AUTO_INCREMENT,
ACCOUNT_NAME VARCHAR(255) NOT NULL,
EMAIL VARCHAR(255) NOT NULL,
ADDRESS VARCHAR(255),
GENDER VARCHAR(255),
CREATED_AT DATE,
PRIMARY KEY (ID)
);
- TINYINT, SMALLINT, MEDIUMINT, INT,BIGINT 등
🔘 날짜타입
- DATE, DATETIME, TIMESTAMP 등
DATE
: 날짜는 있지만 시간은 필요하지 않는 경우, 1000-01-01 ~ 9999-12-31 범위 지원. 3바이트DATETIME
: 날짜 및 시간 부분을 모두 포함하는 값, 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 범위. 8바이트TIMESTAMP
: 날짜 및 시간 부분 모두 포함, 1970-01-01 00:00:01 ~ 2038-01-19 03:14:07 까지 지원. 4바이트🔘 문자타입
- CHAR, VARCHAR, TEXT, BLOB, ENUM, SET 등
CHAR와 VARCHAR
: ()안에 몇 자 까지 입력할 건지 정할 수 있다. CHAR같은 경우, CHAR(30)이면 30글자까지 작성 가능하다.CHAR
는 테이블을 생성할 때 선언한 그 길이로 고정되며 길이는 0~255 사이의 값을 가질 수 있다. 레코드를 저장할 때 무조건 그 길이로 고정되어 저장된다.VARCHAR
같은 경우는 가변 길이 문자열로, 0~65,535 사이의 값을 가질 수 있다. 입력된 데이터에 따라 용량을 가변시켜 저장한다.- VARCHAR(60000)으로 지정해두어도
장윤서
를 입력하면장윤서에 대한 바이트
+길이 기록용 1바이트
로 저장하게 된다.TEXT와 BLOB
: 큰 데이터를 저장할 때 / TEXT - 큰 문자열 저장용(게시판의 본문 등) / BLOB - 이미지, 동영상 등 큰 데이터 저장용, 보통은 AWS S3 사용해서 서버에 올리고 파일에 관한 경로를 VARCHAR로 받아서 저장하는 경우가 많다. (우리 프로젝트 했던 것 처럼!)ENUM과 SET
: 문자열을 열거한 타입
기본키
, 외래키
, 슈퍼키
, 대체키
가 있다.기본키
: Primary Key, PK라고 많이 부른다. 유일성과 최소성을 만족하는 키이다.외래키
: Foreign Key, FK라고 부른다. 다른 테이블의 PK를 참조하는 값이다.후보키
: candidate key, 기본키가 될 수 있는 후보들대체키
: alternative key, 후보키가 두 개 이상일 경우 어느 하나를 PK로 지정하고 남은 후보키슈퍼키
: super key, 레코드를 유일하게 식별할 수 있는 유일성을 갖춘 키