1 Database

📚 데이터베이스 : 일정한 규칙 및 규약 → 구조화되어 저장되는 데이터의 모음

  • DBMS : 데이터베이스를 제어 및 관리하는 통합시스템

  • DBMS마다 정의된 Query언어 → 데이터 삽입, 삭제, 수정, 조회 수행 ⭐️

  • 실시간 접근, 동시 공유 지원함


2 Entity

📚 Entity : 여러개의 속성을 지닌 명사

  • Entity : 회원

  • 속성(Attribute) : 이름, 아이디, 주소, 전화번호 •••

1️⃣ 약한Entity 강한Entity

📍 A가 혼자서는 존재 ❌, B의 존재여부에 따라 종속적
  • A : 약한 Entity

  • B : 강한 Entity


3 Relation

📚 Relation : 데이터베이스에서 정보를 구분하여 저장하는 기본단위

1️⃣ Relation 구조

회원
이름
아이디
주소
전화번호
  • 1개의 Entity(+ 다수의 속성) → 1개의 Relation에 관리

2️⃣ 테이블과 컬렉션

DB종류릴레이션 명칭
RDBMS테이블
NoSQL컬렉션

💡 RDBMS - MySQL

  • 레코드 → 테이블 → DB

💡 NoSQL - MongoDB

  • 도큐먼트 → 컬렉션 → DB

4 Attribute

📚 Attribute : Relation에서 관리하는 구체적 + 고유한 이름을 갖는 정보

  • Entity : Car

  • Attribute : 차넘버, 바퀴수, 차색, 차종

  • 서비스 요구사항기반 → 관리해야할 필요가 있는 속성만 Entity의 속성이 됨


5 Domain

📚 Domain : 각각의 Attribute가 가질 수 있는 값의 집합

  • Entity : 회원

  • Attribute : 이름, 아이디, 주소, 전화번호, 성별

  • Domain : 성별 → {남, 여}


6 필드와 레코드

📚 Field : 테이블의 속성값들을 뜻함
📚 Record : 테이블에 쌓이는 행(row) 단위의 데이터

1️⃣ Book Entity 설계

💡 type 정의

  • 책 아이디 : INT

  • 책 제목 : VARCHAR(255)

  • 책 저자 아이디 : INT

  • 책 출판년도 : VARCHAR(255)

  • 책 장르 : VARCHAR(255)

  • 생성일시 : DATETIME

  • 업데이트일시 : DATETIME

💡 Table

💡 MySQL

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)
);

2️⃣ 필드타입

💡 숫자타입

타입용량(byte)
TINYINT1 byte
SMALLINT2 byte
MEDIUMINT3 byte
INT4 byte
BIGINT8 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

7 Relationship

📚 Relationship

  • 데이터베이스에 테이블은 여러개로 구성
  • 여러개의 테이블 → 서로의 관계가 정의됨

1️⃣ 관계화살표

2️⃣ RDBMS 관계

📍 identifying relationship
	- 부모테이블의 PK or FK → 자식테이블의 PK or FK 구성원으로 전이
    - 서로 종속된 관계

📍 non-identifying relationship
	- 자식테이블의 일반속성(Attribute)그룹의 구성원으로 전이되는 비식별관계
    - 부모는 자식의 부분적인 정보만 표현함
    - 두 테이블은 서로가 없어도 유효한 정보를 가짐

3️⃣ 1 : 1 관계

  • 두 개의 테이블로 분리 → 테이블 구조를 더 이해하기 쉽게 함

  • identifying relationship

    • 부모테이블의 PK를 자식테이블의 PK로 쓰기때문에

4️⃣ 1 : N 관계

  • 한 명의 User → 0 ~ N개의 상품을 장바구니에 담을 수 있음

  • identifying relationship

    • 부모테이블의 PK를 자식테이블의 PK로 쓰기때문에

5️⃣ N : M 관계

  • 학생도 여러개의 강의를, 강의도 여러명의 학생을 포함할 수 있음

  • N : M 관계 테이블 → 두개를 직접 연결 ⛔️

  • 1 : N + 1 : M 관계를 갖는 테이블 두개로 나눠서 설계함


8 Key

📚 Key : 테이블 간 관계를 명확하게하고, 테이블 자체의 인덱스를 위한 장치

  • 유일성 : 중복값 ❌
  • 최소성 : 필드 조합 ❌ → 최소 필드만 사용하여 키를 형성할 수 있는 것

1️⃣ 기본키(PK)

  • 유일성 + 최소성 모두 만족 ✅

  • 테이블 데이터 중, 고유하게 존재하는 속성

  • 중복 ⛔️

  • 자연키 or 인조키 중에서 골라 설정함

📍 자연키
	- 중복된 값들을 제외하며, 중복되지 않는 것을 자연스레 뽑아 나오는 키
    - 언젠가는 변하는 속성을 가짐

📍 인조키
	- 기본 속성이 아니라, 인위적으로 Id를 부여해 만든 식별자
    - MySQL → auto increment로 설정함
    - 인위적으로 생성한 키
    - 보통 기본키를 인조키로 설정

2️⃣ 외래키(PK)

  • 다른 테이블의 기본키를 그대로 참조하는 값

  • 개체와의 관계를 식별함

  • 외래키는 중복을 허용함

3️⃣ 후보키

  • 기본키가 될 수 있는 후보키

  • 유일성 + 최소성 동시에 만족필수

4️⃣ 대체키

  • 후보키가 2개 이상 → 하나를 PK로 지정 → 남은 후보키

5️⃣ 슈퍼키

  • 각 레코드(rows)를 유일하게 식별할 수 있는 유일성을 갖춘 키
profile
🐱Sunyeon-Jeong, mallang developer🐰

0개의 댓글