일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 파이썬데이터분석라이브러리
- MySQL완전삭제
- 1987파이썬
- CRUD
- 도커 컨테이너
- 백준
- 백준 바이러스
- 등수매기기 파이썬
- 백준알파벳파이썬
- 백준 점프
- 장애물인식프로그램 파이썬
- 피아노체조 파이썬
- 파이썬 평범한배낭
- 백준 예산
- 소프티어 지도자동구축
- express
- 프로그래머스
- 백준 피아노체조
- 백준 전쟁 파이썬
- 백준 전쟁-전투
- 백준 점프 파이썬
- MongoDB
- 소프티어 장애물인식프로그램
- express mongodb
- 백준 평범한배낭
- jenkins
- 백준 A->B
- 금고털이 파이썬
- 백준 등수매기기
- 지도자동구축 파이썬
- Today
- Total
바위 뚫는중
DB, DBMS, 정규화, 반정규화, 키의 종류, 최소성과 유일성, ERD 개념정리 본문
UMC 키워드 조사겸, DB 관련 지식 복기를 위한 정리!
SQLD 시험 응시 후 조사하는 거라 더 복습하는 느낌이 나고 좋다.
DB 설계 전, 키워드는 모두 숙지하기! 방대한 내용이라 출처가 다양함.
✅ DB(DataBase)
데이터 베이스, 데이터의 집합
엑셀과 DB의 유사점, 차이점
✅ DBMS(DataBase Management System)
데이터베이스를 관리하고 운영하는 소프트웨어
다양한 데이터가 저장되어 있는 데이터베이스는 여러 명의 사용자나 응용 프로그램과 공유하고 동시에 접근이 가능해야 함.
DBMS의 종류
DBMS와 같은 소프트웨어는 특정 목적을 처리하기 위한 프로그램
대표적으로 MySQL, 오라클, SQL 서버, MariaDB 등이 있음
DBMS의 분류
DBMS의 유형은 계층형(Hierarchical), 망형(Network), 관계형(Relational), 객체지향형(Object-Oriented), 객체관계형(Object-Relational) 등으로 분류됨
현재 사용되는 DBMS 중에는 관계형 DBMS가 가장 많은 부분을 차지하며, MySQL도 관계형 DBMS!
DBMS 장점
- 데이터 중복을 통제할 수 있다.
- 데이터 독립성이 확보된다.
- 데이터를 동시 공유할 수 있다.
- 데이터 보안이 향상된다.
- 데이터 무결성을 유지할 수 있다.
- 표준화할 수 있다.
- 장애 발생 시 회복이 가능하다.
- 응용 프로그램 개발 비용이 줄어든다.
DBMS 단점
- 비용이 많이 든다.
- 백업과 회복 방법이 복잡하다.
- 중앙 집중 관리로 인한 취약점이 존재한다.
✅ 관계형 DB - RDB(Relational DataBase)
관계형 데이터베이스는 서로 관련된 데이터 지점에 대한 접근을 저장 및 제공하는 데이터베이스 유형 관계형 데이터베이스는 데이터를 테이블에 직관적으로 간단하게 나타내는 관계형 모델을 기반으로 합니다
✅ 관계형 DBMS - RDBMS(Relational DataBase Management System)
관계형 DBMS(Relational DBMS)는 줄여서 RDBMS
MySQL뿐만 아니라, 대부분의 DBMS가 RDBMS 형태로 사용됨
⚠️ RDBMS의 데이터베이스는 테이블(table)이라는 최소 단위로 구성되며, 이 테이블은 하나 이상의 열(column)과 행(row)으로 이루어져 있음.
RDBMS에서는 모든 데이터가 테이블에 저장되고, 이 구조가 가장 기본적이고 중요한 구성이기 때문에 RDBMS는 테이블로 이루어져 있으며, 테이블은 열과 행으로 구성되어 있다는 것을 파악했다면 RDBMS를 어느정도 이해했다고 할 수 있음!
✅ DataBase 용어
Schema 스키마
스키마는 테이블을 디자인하기 위한 청사진
이러한 스키마는 테이블의 각 열에 대한 항목과 타입뿐만 아니라 기본 키와 외래 키도 나타내야 함
Table 테이블
테이블은 각각의 행과 열에 대응하는 값을 가지고 있음
이러한 값은 열의 타입에 맞는 값이어야 함
Row 행
행은 관계된 데이터의 묶음을 의미
한 테이블의 모든 행은 같은 수의 열을 가지고 있음
이러한 행은 **튜플(tuple) 또는 레코드(record)**라고도 함
Column 열
각각의 열은 유일한 이름을 가지고 있으며, 자신만의 타입을 가지고 있음
이러한 열은 필드(field) 또는 속성(attribute)이라고도 불림
Key 키
테이블에서 **행의 식별자로 이용되는 열을 키(key) 또는 기본 키(primary key)**라고 함
즉, 테이블에 저장된 레코드를 고유하게 식별하는 후보 키(candidate key) 중에서 데이터베이스 설계자가 지정한 속성을 의미
Index 인덱스
추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조
예를들어, 책의 맨 앞 또는 맨 뒤에 색인을 추가하는데, 데이터베이스의 index는 책의 색인과 같음
✅ 유일성과 최소성
이를 파악하려면, 먼저 키에 대한 개념이 확립되어야 한다.
아래의 예시를 통해 알아보자!
🔑 슈퍼키 Super Key - 유일하게 식별하는 키, 유일성 O 최소성 X
각 행을 유일하게 식별할 수 있는 속성들의 집합, 서로 구분만 할 수 있다면 슈퍼키!
- 위의 그림을 예로, 학번과 주민번호는 슈퍼키! 그렇지만 이름, 생년월일로는 유일하게 식별 불가하므로 슈퍼키가 아님
🔑 후보키 Candidate Key - 유일하게 식별하는 ‘최소한의’ 속성들의 집합, 유일성 O 최소성 O
각 행을 유일하게 식별하는 최소한의 속성들의 집합, 서로 구분하면서 불필요한 속성들이 없어야 후보키!
- 위의 그림을 예로, 학번과 주민번호는 학생들을 유일하게 구분하고 속성이 하나!이므로 후보키가 맞음, 이름과 생년월일은 같을 수도 있기 때문에 후보키가 아님
🔑 기본키 Primary Key - 최소성을 가지는 후보키들 중에서 메인으로 선택한 키
- 위의 테이블에서 메인은 학번이므로, 학번이 기본키가 됨!
- MySQL의 PRIMARY KEY임
🔑 대체키 Alternate Key - 기본키를 제외한 나머지 후보키
- 위의 테이블에서 메인이 학번이니, 주민번호가 후보키가 됨!
- MySQL의 UNIQUE
🔑 외래키 Foreign Key - 한 테이블이 다른 테이블의 기본키를 참조하는 키
한 테이블이 다른 테이블의 기본키를 참조하여 테이블간의 관계를 만들어 내는 키!
- 위의 그림을 예로, 취미 테이블의 학번은 학생테이블의 학번을 참조! 했으므로 외래키
- MySQL의 FOREIGN KEY
🔑 유니크키 Unique Key, Unique Index
값 중복을 허용하지 않고, NULL 값을 허용하는, 테이블에서 여러 개 생성이 가능 한 키
⚠️ 유일성 - 하나의 키값으로 튜플을 유일하게 식별할 수 있는 성질
- 위의 예로, 학번과 주민번호 같은 속성들을 말한다.
- 생년월일과 이름은 겹치지만 학번과 주민번호는 겹칠 수 없다.
- 이렇듯, 각각의 튜플을 구분할 수 있는 것을 유일성이라 한다.
⚠️ 최소성 - 키를 구성하는 속성들 중 꼭 필요한 최소성의 속성들로만 키를 구성하는 성질
- 키를 구성하는 속성들이, 각 튜플을 구분하는데에 꼭! 필요한 속성들로만 구분되어 있는가?가 중요하다.
- 예를들어, (주민번호, 이름, 나이)와 같은 키가 있다면, 이름과 나이를 뺀 주민번호만으로도 튜플들을 식별할 수 있다. 즉, 이름과 나이를 제외하면 해당 키는 최소성을 만족한다.
✅ DB간의 관계
✅ 정규화
- 정규화는 데이터의 일관성, 최소한의 데이터 중복, 최소한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정
- 정규화된 모델은 테이블이 분해됨
- 불필요한 데이터를 입력하지 않아도 되기 때문에 중복 데이터가 제거됨!
정규화 절차 (정처기, SQLD 단골 질문,,)
✅ 반정규화
- 데이터베이스의 성능 향상을 위해, 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능 향상 방법
- 반정규화는 select 조회 속도를 향상시키지만, 데이터 모델의 유연성은 낮아짐
반정규화 절차
✅ ERD
ERD란 Entity Relationship Diagram의 약어로, 개체-관계 다이어그램이다.
데이터베이스 구조를 한눈에 알아보기 위해서 쓰인다.
Entity 개체 - 현실에 존재하는 개별적으로 식별할 수 있는 개체를 의미
- Entity는 관리하고자 하는 정보의 실체이며, 사람, 객체 혹은 개념이라고 이해하면 된다.
- 데이터베이스를 설계할때, 쉽게는 테이블이 Entity로 정의될 수 있다.
Attribute 속성 - Entity의 특징을 나타내는 것들
- Attribute는 Entity를 구성하고 있는 구성 요소이다.
- 데이터 타입을 반드시 같이 명시해줘야 한다.
- 예를들어 학생이라는 개체는 학번과 수업이라는 속성을 가질 수 있음.
Relationship 관계 - Entity간의 관계
- Entity간의 관계를 의미
- 학생과 수업이라는 개체는 ‘수강하다’라는 관계를 맺을 수 있음.
💡 표기법(IE 표기법)
ERD 설계시 자연스럽게 알게될 부분이지만, 미리 살펴볼 것.
Entity, Attribute 개체와 속성
상단에 개체 표기, 하단에는 PK FK 등을 표기하고, 속성 표기
Relationship 관계 - 점선과 실선
점선과 실선으로 식별관계를 표기.
식별관계: 부모 엔터티의 기본키나 유니크키를 자식 엔터티의 기본키로 사용하는 관계
= 부모가 있어야 자식도 있다
ex) 학생이 있어야 성적도 있다
비식별관계: 부모 엔터티의 기본키나 유니크키를 자식 엔터티의 외래키로 사용하는 관계
= 부모가 없어도 자식이 있다
ex) 학생이 없어도 과목은 있다
개체와 개체간의 대응수
1:N, N:N 을 나타내는 것
ERD 예시
[출처]
https://hongong.hanbit.co.kr/데이터베이스-이해하기-databasedb-dbms-sql의-개념/
http://www.tcpschool.com/mysql/mysql_intro_relationalDB
https://velog.io/@00yubin00/DB-키의-종류-슈퍼키-후보키-기본키-대체키-외래키
https://sodayeong.tistory.com/106
'SQL' 카테고리의 다른 글
[Oracle] Orange 단축키 모음 (3) | 2024.07.23 |
---|---|
MySQL error 2002/ ERROR! The server quit without updating PID file (/opt/homebrew/var/mysql/ran-2.local.pid) (1) | 2022.11.11 |