데이터베이스
- 데이터베이스(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 |
고객이름 |
Email |
| 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 |
고객이름 |
Email |
| 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)
- 각 컬럼의 값이 원자값(분할 불가능한 값)을 가져야 한다.
| 고객ID |
고객이름 |
상품명 |
| 1 |
조나희 |
노트북, 태블릿, 핸드폰 |
| 2 |
나희 |
핸드폰 |
| 3 |
임나희 |
태블릿 |
| 고객ID |
고객이름 |
상품명 |
| 1 |
조나희 |
노트북 |
| 2 |
나희 |
핸드폰 |
| 3 |
임나희 |
태블릿 |
제2정규형(2NF)
- 1NF를 만족하고, 모든 비주요 속성이 후보키 전체에 완전히 함수적으로 의존해야 한다.
- 간단히 말해, 어떠한 column이 row를 구분할 수 있는 column들과 관계가 없으면 다른 테이블로 분리해야 한다.
- row를 구분할 수 있는 column들 : (고객ID + 상품명)
| 고객ID |
고객이름 |
상품명 |
상품 가격 |
| 1 |
조나희 |
노트북 |
100만 |
| 2 |
나희 |
핸드폰 |
120만 |
| 3 |
임나희 |
태블릿 |
80만 |
| 고객ID |
고객이름 |
상품명 |
| 1 |
조나희 |
노트북 |
| 2 |
나희 |
핸드폰 |
| 3 |
임나희 |
태블릿 |
| 상품명 |
상품 가격 |
| 노트북 |
100만 |
| 핸드폰 |
120만 |
| 태블릿 |
80만 |
제3정규형(3NF)
- 2NF를 만족하고, 키가 아닌 모든 컬럼이 테이블의 모든 키에 이행적 종속이 되지 않는다.
- 간단히 말해, 어떠한 column이 row를 구분할 수 있는 column들 외의 다른 colum과 관계있으면 다른 테이블로 분리해야 한다.
- row를 구분할 수 있는 column : 상품명
| 상품명 |
상품 가격 |
제조사 |
| 노트북 |
100만 |
7star |
| 핸드폰 |
Pin |
Pine |
| 태블릿 |
80만 |
shyme |
| 상품명 |
상품 가격 |
제조사 |
| 노트북 |
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