▶DBMS
- 데이터를 체계적으로 저장하고 관리할 수 있게 도와주는 프로그램
●사용예시
- MySQL : 오픈 소스 데이터베이스로 많이 사용됨
- PostgreSQL: 또 다른 오픈 소스 데이터베이스로 안전성이 높다.
- Oracle: 기업에서 많이 사용하는 상용 데이터베이스이다.
- MS SQL Server : 마이크로소프트에서 만든 데이터베이스
▶키의 종류
- 데이터를 고유하게 식별하는 데 사용됨,
즉, 키를 통해 데이터 베이스 내에서 특정 데이터를 쉽게 찾을 수 있다.
● 기본키(Primary key)
- 테이블에서 각 행(레코드)을 유일하게 식별
- 중복되지 않으며 NULL 값을 가질 수 없다.
- 주민번호 처럼 고유한 ID
● 외래 키 (Foreign Key)
- 다른 테이블의 기본 키를 참조하는 키
- 친구의 전화번호를 저장하는 것과 같다. 친구의 전화번호는 친구를 고유하게
식별하는 정보
● 후보키(Candidate key)
- 역할 : 기본 키로 사용할 수 있는 모든키
- 비유 : 여러 개의 고유한 ID 중에서 하나를 기본 키로 선택하는 것
예를 들어, 주민등록번호와 여권 번호가 모두 고유하다면 둘 다 후보키가
될 수 있다.
● 대체 키(Alternate Key)
- 역할 : 기본 키로 선택되지 않은 후보 키
- 비유 : 주민등록번호가 기본 키로 선택되면 여권번호는 대체 키가 된다.
▶ 관계의 종류
- 데이터베이스에서 테이블 간의 관계는 데이터를 더 체계적으로 관리할 수
있게 해준다.
●1:1 관계
- 한 테이블의 한 행이 다른 테이블의 한 행과만 연결된다.
- ex) 사람과 여권, 한 사람은 하나의 여권만 가진다.
● 1:N 일대다 관계
- 한 테이블의 한 행이 다른 테이블의 여러 행과 연결
● 다대다 (N:M) 관계
- 여러 행이 여러 행과 연결, 이를 구현하기 위해 중간에 연결테이블 필요
- ex) 학생과 수업. 한 학생은 여러 수업을 듣고, 한 수업에는 여러 학생이
있을 수 있다.
▶ 데이터 무결성
- 데이터의 정확성과 일관성을 유지하는 것
- 데이터를 신뢰할 수 있도록 한다.
● 참조 무결성 : 외래 키가 참조하는 값이 반드시 존재한다.
-ex) 주문 테이블의 고객 ID가 고객 테이블에도 존재해야 한다.
● 도메인 무결성 : 데이터가 정의된 도메인에 속해야 한다.
- ex) 나이 특성값은 무조건 0 이상이어야 하며, -1 같은 값은 들어갈 수 없다.
● 엔터티 무결성 : 기본키는 중복되거나 NULL이 될 수 없다.
- ex) 주민번호와 같은 고유값은 중복이 되어서도 안되고, NULL 값이어도
안된다.
▶ 제약 조건
- 제약 조건은 데이터가 특정 규칙을 따르도록 하는 규칙, 제약 조건을 통해
데이터의 무결성을 유지
● NOT NULL : 해당 필드가 빈 값(NULL)이 될 수 없다.
● UNIQUE : 해당 필드의 값이 유일해야 한다.
● CHECK : 특정 조건을 만족해야 한다.
● DEFAULT : 필드의 기본값을 설정해야 한다.
▶데이터 베이스 설계
● 논리적 설계
- 데이터 모델을 설계하고 ERD를 작성
- 비유 : 건물의 각 방과 구조를 설계하는 것처럼, 데이터베이스의 각 테이블과
관계를 설계
● 물리적 설계
- 실제 DBMS에서 테이블을 생성하고 인덱스를 설정
- 비유 : 설계도를 바탕으로 실제 건물을 짓는 것처럼, 논리적 설계를 바탕으로
실제 데이터베이스를 만든다.
▶정규화
- 데이터 중복을 최소화하고 데이터를 구조화하는 과정
- 정규화를 통해 데이터 베이스의 무결성을 유지하고 관리하기 쉽게 만든다.
1) 1NF(제1정규형)
- 모든 필드가 원자값을 가진다.
- 비유 : 각 상자에 하나의 물건만 넣는 것과 같음, 하나의 필드에는 하나의
값만 들어간다.
2) 2NF(제2정규형)
- 1NF를 만족하고, 부분적 함수 종속을 제거
- 비유 : 각 상자에 관련된 물건만 넣는 것과 같음, 각 테이블에는 테이블에
필요한 데이터만 넣는다.
3) 3NF(제3정규형)
- 2NF를 만족하고, 이행적 함수 종속을 제거
- 비유 : 각 상자에 정말 필요한 물건만 넣는 것과 같음, 불필요한 물건을
제거하고, 꼭 필요한 물건만 넣는다.
*** 데이터베이스 설계 시, 정규화를 통해 데이터 중복을 줄이는 것이
중요하지만, 과도한 정규화는 오히려 성능을 저하시킬 수 있기 때문에
필요에 따라 정규화를 적절히 적용하는 것이 중요!!! ***
▶트랜잭션(Transaction)
- 데이터베이스의 상태를 변화시키는 작업의 단위
- 여러 작업을 하나의 단위로 묶어서 실행
● ACID 특성
1) Atomicity(원자성)
- 트랜잭션이 완전히 수행되거나 전혀 수행되지 않아야 한다.
- 은행에서 돈을 이체할 때 돈이 모두 이체되거나 전혀 이체되지 않은 것과 같다.
2) Consistency (일관성)
- 트랜잭션 후에도 데이터베이스는 일관된 상태를 유지
- 계산 후 항상 맞아 떨어지는 장부와 같다. 트랜잭션이 끝난 후에도
데이터 베이스는 항상 올바른 상태를 유지
3) Isolation(격리성)
- 동시에 실행되는 트랜잭션 간의 간섭을 방지
- 여러 사람이 동시에 요리를 하지만 서로의 재료에 간섭하지 않는 것
- 각각의 트랜잭션은 독립적으로 실행
4) Durability(내구성)
- 트랜잭션이 완료된 후에도 데이터는 영구적으로 저장됨
- 트랜잭션이 완료된 후에도 데이터는 항상 저장됨
▶인덱스
- 데이터를 빠르게 검색하기 위한 데이터 구조
- 인덱스를 사용하면 데이터베이스에서 필요한 데이터를 더 빨리
찾을 수 있다.
1) B-Tree 인덱스
- 균형 트리 구조로 해시 인덱스보다 상대적으로 빠르게 데이터를
찾을 수 있다.
- 도서관에서 책의 제목 순서로 정리된 카탈로그와 같다.
2) 해시 인덱스
- 특정값을 기준으로 한 해시 테이블 구조
- 친구의 이름을 기억하고 전화번호를 바로 찾는 것과 같다.
- 이름을 해시 키로 사용하여 전화번호를 빠르게 찾을 수 있다.
▶ERD(Entity - Relationship Diagram)
- 데이터 베이스의 논리적 구조를 시각적으로 표현한 다이어그램
1) 엔터티 (Entity)
- 데이터를 저장하는 객체
- 예) 학생, 강의, 교수
2) 속성(Attribute)
- 엔터티의 특징을 나타내는 필드
- 예) 학생의 이름, 강의의 이름, 교수의 이름
3) 관계(Relationship)
- 엔터티 간의 연관성
- 예) 학생이 강의를 듣고, 교수가 강의를 가르친다.