📚 데이터베이스
: 일정한 규칙 및 규약 → 구조화되어 저장되는 데이터의 모음
DBMS
: 데이터베이스를 제어 및 관리하는 통합시스템
DBMS마다 정의된 Query언어
→ 데이터 삽입, 삭제, 수정, 조회 수행 ⭐️
실시간 접근, 동시 공유 지원함
📚 Entity
: 여러개의 속성을 지닌 명사
Entity
: 회원
속성(Attribute)
: 이름, 아이디, 주소, 전화번호 •••
📍 A가 혼자서는 존재 ❌, B의 존재여부에 따라 종속적
A : 약한 Entity
B : 강한 Entity
📚 Relation
: 데이터베이스에서 정보를 구분하여 저장하는 기본단위
회원 |
---|
이름 |
아이디 |
주소 |
전화번호 |
DB종류 | 릴레이션 명칭 |
---|---|
RDBMS | 테이블 |
NoSQL | 컬렉션 |
📚 Attribute
: Relation에서 관리하는 구체적 + 고유한 이름을 갖는 정보
Entity
: Car
Attribute
: 차넘버, 바퀴수, 차색, 차종
서비스 요구사항기반 → 관리해야할 필요가 있는 속성만 Entity의 속성이 됨
📚 Domain
: 각각의 Attribute가 가질 수 있는 값의 집합
Entity
: 회원
Attribute
: 이름, 아이디, 주소, 전화번호, 성별
Domain
: 성별 → {남, 여}
📚 Field
: 테이블의 속성값들을 뜻함
📚 Record
: 테이블에 쌓이는 행(row) 단위의 데이터
책 아이디 : INT
책 제목 : VARCHAR(255)
책 저자 아이디 : INT
책 출판년도 : VARCHAR(255)
책 장르 : VARCHAR(255)
생성일시 : DATETIME
업데이트일시 : DATETIME
CREATE TABLE book (
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(255),
author_id INT,
publishing_year VARCHAR(255),
genre VARCHAR(255),
created_at DATETIME,
updated_at DATETIME,
PRIMARY KEY (id)
);
타입 | 용량(byte) |
---|---|
TINYINT | 1 byte |
SMALLINT | 2 byte |
MEDIUMINT | 3 byte |
INT | 4 byte |
BIGINT | 8 byte |
타입 | 특징 | 용량(byte) |
---|---|---|
DATE | - 날짜표기 ✅ - 시간표기 ⛔️ | 3 byte |
DATETIME | - 날짜표기 ✅ - 시간표기 ✅ - (1000-01-01 00:00:00 ~ 9999-12-31 23:59:59) | 8 byte |
TIMESTAMP | - 날짜표기 ✅ - 시간표기 ✅ - (1970-01-01 00:00:00 ~ 2038-01-19 03:14:07) | 4 byte |
타입 | 글자수 | 특징 | 용도 |
---|---|---|---|
CHAR(입력최대글자수) | 0 ~ 255 | - 고정길이 문자열 - 선언한 길이 값으로 고정해서 저장됨 - (CHAR(100) → record 10글자 저장 ➡️ 무조건 100byte로 저장됨) | 유동적이지 않은 데이터 |
VARCHAR(입력최대글자수) | 0 ~ 65,535 | - 가변길이 문자열 - 입력한 데이터에따라 용량을 가변시켜 저장함 | 유동적인 데이터 |
타입 | 용도 | 특징 |
---|---|---|
TEXT | 큰 문자열 저장 | 게시판 본문 저장 시 사용 |
BLOB | 이미지, 동영상 등 큰 데이터 저장 | - 아마존 호스팅서비스 S3사용 선호 - 서버에 파일업로드 → 파일 경로 VARCHAR()로 저장 |
타입 | 특징 | 요소(개) |
---|---|---|
ENUM | - 문자열 열거 타입 - (x-small, small, medium, large, x-large) 형태 - 단일선택만 가능 - 잘못된 값 → 빈문자열 대신 삽입 | 최대 65,535 |
SET | - 문자열 열거 타입 - 여러개데이터 선택가능 - bit단위 연산가능 | 최대 64 |
📚 Relationship
- 데이터베이스에 테이블은 여러개로 구성
- 여러개의 테이블 → 서로의 관계가 정의됨
📍 identifying relationship
- 부모테이블의 PK or FK → 자식테이블의 PK or FK 구성원으로 전이
- 서로 종속된 관계
📍 non-identifying relationship
- 자식테이블의 일반속성(Attribute)그룹의 구성원으로 전이되는 비식별관계
- 부모는 자식의 부분적인 정보만 표현함
- 두 테이블은 서로가 없어도 유효한 정보를 가짐
두 개의 테이블로 분리 → 테이블 구조를 더 이해하기 쉽게 함
identifying relationship
한 명의 User → 0 ~ N개의 상품을 장바구니에 담을 수 있음
identifying relationship
학생도 여러개의 강의를, 강의도 여러명의 학생을 포함할 수 있음
N : M 관계 테이블 → 두개를 직접 연결 ⛔️
1 : N + 1 : M 관계를 갖는 테이블 두개로 나눠서 설계함
📚 Key
: 테이블 간 관계를 명확하게하고, 테이블 자체의 인덱스를 위한 장치
유일성 + 최소성 모두 만족 ✅
테이블 데이터 중, 고유하게 존재하는 속성
중복 ⛔️
자연키
or 인조키
중에서 골라 설정함
📍 자연키
- 중복된 값들을 제외하며, 중복되지 않는 것을 자연스레 뽑아 나오는 키
- 언젠가는 변하는 속성을 가짐
📍 인조키
- 기본 속성이 아니라, 인위적으로 Id를 부여해 만든 식별자
- MySQL → auto increment로 설정함
- 인위적으로 생성한 키
- 보통 기본키를 인조키로 설정
다른 테이블의 기본키를 그대로 참조하는 값
개체와의 관계를 식별함
외래키는 중복을 허용함
기본키가 될 수 있는 후보키
유일성 + 최소성 동시에 만족필수