데이터베이스
- 데이터베이스(Database)는 조직적으로 저장된 데이터의 집합
DBMS
- 데이터베이스 관리 시스템(Database Management System)은 데이터를 효율적으로 저장, 조회, 수정, 삭제할 수 있도록 도와주는 시스템
- Oracle, MySQL, PostgreSQL, SQLite 등
관계형 데이터베이스
- 관계형 데이터베이스(Relational Database)는 데이터를 테이블로 구성하며, 각 테이블은 행과 열로 구성된다.
- 자료를 여러 테이블로 나누어서 관리하고, 테이블간 관계를 설정해 여러 데이터를 쉽게 조작할 수 있다,
- SQL(Structured Query Language)을 사용하여 데이터를 관리하고 검색한다.
- 테이블(Table)
- 데이터베이스에서 데이터를 저장하는 기본 구조이다.
- 행과 열의 격자 형태로 구성되며, 하나의 테이블은 특정 유형의 데이터를 나타냅니다.
- ex) 고객 데이터를 담은 고객 테이블, 주문 데이터를 담은 주문 테이블
- 행(Row)
- 격자의 가로 부분
- 데이터 유형의 개별 항목을 나타낸다.
- 각 행은 테이블 내에서 유일하며, 기본 키(Primary Key)로 구분된다.
- 레코드라고도 한다.
- ex) 고객 테이블의 ‘A 고객’에 대한 정보, ‘B 고객’에 대한 정보 등
- 열(Column)
- 행이 가져야 하는 데이터의 종류를 정의한다.
- 필드, 속성이라고도 한다.
- ex) 고객 테이블의 ‘고객 이름’, ‘email’ 등
예시 고객 테이블
고객ID | 고객이름 | |
1 | 조나희 | nahee2253@naver.com |
2 | 김나희 | nahee2253@naver.com |
3 | 임나희 | nahee2253@naver.com |
예시 주문 테이블
주문ID | 고객ID | 상품명 |
101 | 1 | 노트북 |
102 | 1 | 핸드폰 |
데이터베이스 스키마
- 데이터베이스 스키마(database schema)는 데이터베이스에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 정의한 것을 말한다.
- 스키마는 데이터베이스 설계의 청사진 역할을 하며, 데이터베이스 시스템에서 데이터를 어떻게 저장하고 접근할지에 대한 정보를 제공한다.
ERD
- ERD(Entity-Relationship Diagram)는 데이터베이스의 구조를 시각적으로 표현하는 도구이다.
- 간단하게 말해서, 스키마를 시각화한 것이다.
- ex) draw.io
ERD의 주요 구성 요소
- 엔티티(Entity): 데이터베이스에 저장되는 주체이다. 예를 들어, '고객', '주문', '제품' 등이 엔티티가 될 수 있다.
- 속성(Attribute): 엔티티를 구성하는 세부 항목으로, 엔티티의 특성을 나타낸다. 예를 들어, '고객' 엔티티의 속성으로는 '고객 이름', '주소', '전화번호' 등이 있을 수 있다.
- 관계(Relationship): 두 엔티티 사이의 연관성을 나타낸다. 관계는 '일대일', '일대다', '다대다' 등으로 분류될 수 있으며, 선으로 표현되어 연결된 엔티티 사이를 나타낸다.
- 기본 키(Primary Key): 각 엔티티 내에서 각 인스턴스(또는 행)을 고유하게 식별하는 속성이다.
- 외래 키(Foreign Key): 다른 엔티티의 기본 키를 참조하여 두 엔티티 사이의 관계를 설정하는 속성이다.
예시 고객 테이블
고객ID | 고객이름 | |
1 | 조나희 | nahee2253@naver.com |
2 | 김나희 | nahee2253@naver.com |
3 | 임나희 | nahee2253@naver.com |
예시 주문 테이블
주문ID | 고객ID | 상품명 |
101 | 1 | 노트북 |
102 | 1 | 핸드폰 |
- 주문 테이블의 고객ID는 FK로, 고객 테이블의 하나의 레코드를 가리킨다.
- 주문 테이블에서 101번째 주문에 대한 레코드는 고객 테이블에서 고객ID가 1 인 레코드와 관련이 있다.
데이터 무결성
- 데이터 무결성(data integrity)은 데이터의 정확성과 일관성을 유지하고 보증하는 것을 말한다.
- 개체 무결성(Entity Integrity)
- 테이블의 각 행이 유일하게 식별될 수 있도록 보장하는 것
- 주로 기본 키(Primary Key) 제약 조건을 통해 이루어진다.
- 참조 무결성(Referential Integrity)
- 참조 무결성은 외래 키(Foreign Key)를 통한 테이블 간의 관계에서 유지되어야 하는 데이터의 일관성을 의미한다.
- 외래 키는 다른 테이블의 기본 키를 참조하여 테이블 간의 관계를 맺는데, 참조 무결성은 이러한 참조 관계가 유효한 데이터를 가리키도록 보장합니다.
- 즉, 외래 키 값은 NULL이거나 참조하는 테이블의 기본 키 값 중 하나와 일치해야 합니다.
- 도메인 무결성(Domain Integrity)
- 도메인 무결성은 테이블의 필드가 정의된 도메인(유효한 값의 집합)에 속한 값만을 가져야 한다는 원칙이다.
- 이는 데이터 타입, 데이터 형식, 범위 제한, 기본값 설정 등을 통해 구현됩니다.
정규화
- 정규화(Normalization)는 데이터를 구조화하여 중복을 최소화하고, 데이터 무결성을 유지하기 위한 과정이다.
제1정규형(1NF, First Normal Form)
- 각 컬럼의 값이 원자값(분할 불가능한 값)을 가져야 한다.
- 상품명에 2개의 값이 들어있음 (X)
고객ID | 고객이름 | 상품명 |
1 | 조나희 | 노트북, 태블릿, 핸드폰 |
2 | 나희 | 핸드폰 |
3 | 임나희 | 태블릿 |
- 1NF
고객ID | 고객이름 | 상품명 |
1 | 조나희 | 노트북 |
2 | 나희 | 핸드폰 |
3 | 임나희 | 태블릿 |
제2정규형(2NF)
- 1NF를 만족하고, 모든 비주요 속성이 후보키 전체에 완전히 함수적으로 의존해야 한다.
- 간단히 말해, 어떠한 column이 row를 구분할 수 있는 column들과 관계가 없으면 다른 테이블로 분리해야 한다.
- row를 구분할 수 있는 column들 : (고객ID + 상품명)
- 고객ID와 상품가격은 관계가 없다.(X)
고객ID | 고객이름 | 상품명 | 상품 가격 |
1 | 조나희 | 노트북 | 100만 |
2 | 나희 | 핸드폰 | 120만 |
3 | 임나희 | 태블릿 | 80만 |
- 2NF
고객ID | 고객이름 | 상품명 |
1 | 조나희 | 노트북 |
2 | 나희 | 핸드폰 |
3 | 임나희 | 태블릿 |
상품명 | 상품 가격 |
노트북 | 100만 |
핸드폰 | 120만 |
태블릿 | 80만 |
제3정규형(3NF)
- 2NF를 만족하고, 키가 아닌 모든 컬럼이 테이블의 모든 키에 이행적 종속이 되지 않는다.
- 간단히 말해, 어떠한 column이 row를 구분할 수 있는 column들 외의 다른 colum과 관계있으면 다른 테이블로 분리해야 한다.
- row를 구분할 수 있는 column : 상품명
- 제조사 대표는 제조사와 관련이 있다.
상품명 | 상품 가격 | 제조사 |
노트북 | 100만 | 7star |
핸드폰 | Pin | Pine |
태블릿 | 80만 | shyme |
- 3NF
상품명 | 상품 가격 | 제조사 |
노트북 | 100만 | 7star |
핸드폰 | Pin | Pine |
태블릿 | 80만 | shyme |
제조사 | 제조사 대표 |
7star | dragon lee |
Pine | team cook |
shyme | jun |
비관계형 데이터베이스
- NoSQL(Not only SQL)
- 다양한 형태의 데이터를 저장할 수 있으며, 대규모 분산 데이터 처리에 적합하나 정합성이 떨어질 수 있다.
key-value Database
- key-value 형태로 데이터를 저장한다.
- ex) redis
Graph Database
- 노드(Entities), 엣지(Relationships) 및 속성(Properties)을 사용하여 데이터 간의 복잡한 관계를 표현한다.
- RDB는 table간의 관계를 나타낸다면, Graph Database는 데이터간의 관계를 나타낸다.
- ex) Neo4j
Document Database
- JSON과 같은 문서 형식으로 데이터를 저장한다.
- ex) MongoDB
'CS' 카테고리의 다른 글
인증과 권한 (0) | 2024.03.18 |
---|---|
REST API 및 CRUD (3) | 2024.03.15 |
Git/Github란? (0) | 2024.03.12 |
RAID (0) | 2024.01.26 |
Full Stack, Restful, MicroService, DevOps, MLOps (0) | 2024.01.25 |