데이터베이스 1주차 스터디 정리

파일시스템이란 컴퓨터에서 저장장치 안에 저장되는 파일들을 관리하는 시스템이다.

폴더와 파일의 계층 구조로 되어있어 폴더를 만들고 폴더안에 파일을 만들어서 사용한다.

파일 시스템은 간단한 데이터 저장 및 검색 작업에 적합하다.

 

데이터베이스는 여러 사람들이 공유하고 사용할 목적으로 통합 관리되는 데이터들의 집합이다.

특징은 아래와 같다.

1. 실시간 접근성

- 사용자의 질의에 대하여 즉각적인 처리와 응답이 이루어진다.

2. 지속적인 변화

- 생성, 수정, 삭제를 통하여 항상 최신의 데이터를 유지

3. 동시 공유

- 사용자들이 원하는 데이터를 동시에 공유 가능

4. 내용에 대한 참조

- 사용자가 원하는 데이터를 주소가 아닌 내용에 따라 참조 가능

5. 데이터 논리적 독립성

- 응용프로그램과 데이터베이스는 독립되어 있으므로, 데이터의 논리적 구조와 응용프로그램은 별개로 동작

 

데이터베이스를 관리하고 운영하는 소프트웨어를 DBMS(Database Management System)이라고 한다.

데이터베이스에는 여러 명의 사용자나 응용 프로그램과 공유하고 동시에 접근 가능해야 한다.

가까운 예로 은행이 가지고 있는 예금 계좌 데이터베이스에는 ATM 기기, 인터넷  뱅킹, 예금 계좌 주인, 은행 담당 직원 등  여러 명이 동시에 접근할 수 있어야 한다.

https://hongong.hanbit.co.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-databasedb-dbms-sql%EC%9D%98-%EA%B0%9C%EB%85%90/

 

DBMS 특징은 다음과 같다

1. 데이터 독립성

- 데이터의 물리적, 논리적 구조 등이 변경 되어도 응용 프로그램에 영향을 끼치지 않는 성질

2. 백업 및 복구

- 데이터 손실에 대한 복구 메커니즘 제공

3. 무결성 및 일관성

- 입력되는 데이터에가 정확하고 일관성이 있는지 확인

4. 접근 용이성

- 질의를 통하여 원하는 데이터를 조회, 등록, 수정, 삭제 가능

5. 보안 조치

- 사용자 인증, 역할 기반 액세스 제어 및 데이터 암호화

 

💡 데이터베이스의 특징이 곧 DBMS 의 특징과 똑같은 말 아닌가?

 

데이터 독립성에 대해 자세히 알아보자

독립성에는 2가지 종류가 있다.

 

논리적 데이터 독립성

- 개념 스키마가 변경되어도, 외부 스키마에 영향을 주지 않는다.

- 논리적 구조가 변경돼도 응용프로그램에 영향이 없다.

 

물리적 데이터 독립성

- 내부 스키마가 변경되어도, 개념 스키마 및 외부 스키마에 영향을 주지 않는다.

- 저장장치의 구조변경은 응용프로그램과 개념 스키마에 영향이 없다.

 

독립성을 유지하기 위해 사상(Mapping)이라는 데이터 독립성 구현 기법을 사용한다.

 

💡 데이터 독립성의 개념이 어렵구나.. 100% 와닿지는 않는다. 특히 사상(Mapping)의 구현기법 예시가 어렵도다.

 

스키마

스키마란 DB의 구조와 제약 조건에 관한 전반적인 명세를 정의한 메타데이터의 집합이다.

 

스키마는 사용자의 관점에 따라 외부 스키마, 개념 스키마, 내부 스키마로 나뉜다.

 

https://iingang.github.io/posts/DB-schema/

 

1. 외부 스키마 (사용자 뷰)

- 개별 사용자들의 입장에서 데이터 베이스의 논리적 구조를 정의한 것

- 동일한 데이터에 대해, 서로 다른 관점을 정의할 수 있도록 허용

 

2. 개념 스키마 (전체적인 뷰)

- DB의 전체 조직에 대한 논리적인 구조로, 물리적인 구현은 고려하지 않는다.

- 각 데이터베이스에는 한 개의 개념 스키마만 존재한다.

- 개체 간의 관계 및 무결성 제약 조건에 대한 명세를 정의한다.

- 데이터베이스 파일에 저장되는 데이터의 형태를 나타낸다.

 

3. 내부 스키마 (저장 스키마)

- 물리적 저장장치의 입장에서 본 데이터베이스 구조이다.

- 개념 스키마를 디스크 기억장치에 물리적으로 구현하기 위한 방법을 기술한 것이다.

 

 

RDBMS(관계형 데이터베이스 관리시스템)란

데이터를 2차원 표를 사용해 관리하는 데이터베이스이다.

자연스럽고 직관적으로 이해하기 쉬운 형식으로 데이터를 관리할 수 있다.

 

릴레이션 스키마

릴레이션에 어떤 정보가 담길지를 정의한다.

속성: 레이션 스키마의 열

도메인: 릴레이션에 포함된 각각의 속성들이 가질 수 있는 값들의 집합

차수: 한 릴레이션에 들어 있는 애트리뷰트의 수 (최소 차수 1)

 

릴레이션 인스턴스

릴레이션 스키마에 실제로 저장된 데이터의 집합

투플: 릴레이션의 각 행을 레코드라 하는데, 레코드를 좀 더 공식적으로 투플이라고 나타내며, 릴레이션이 나타내는 엔티티의 특정 인스턴스에 관한 사실들의 모임

카디날리티: 릴레이션 투플의 개수 (최소 카디날리티 1)

 

키의 정의

데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 기준이 되는 속성

 

키의 특징

유일성

하나의 키 값으로 하나의 튜플만을 유일하게 식별 가능

 

최소성

키를 구성하는 속성 하나를 제거하면 유일하게 식별할 수 없도록 꼭 필요한 최소한의 속성으로 구성

 

최소성을 만족한다고 슈퍼키는 아니다.

슈퍼키는 희소성과 관계없이 튜플을 유일하게 구분할 수 있으면 된다.

 

 

키의 종류

 

https://sharpcoder.tistory.com/116

 

슈퍼키

각 행을 유일하게 식별할 수 있는 속성들의 집합

[학번] O

[주민등록번호] O

[이름] X

[생년월일] X

[이름, 생년월일] O => 개인적인 생각으로 이름과 생년월일이 우연의 일치로 같을 수도 있을 것 같으나 여기서는 다르다고 가정

 

후보키

각 행을 유일하게 식별할 수 있는 "최소한의" 속성들의 집합

[학번] O

[주민등록번호] O

[이름, 생년월일] X => [학번] 또는 [주민등록번호] 하나만 가지고도 구분할 수 있으므로 속성 2개를 조합할 필요가 없다. 따라서 후보키가 아니다.

 

기본키

후보키들 중에서 하나를 메인으로 선택한 키

 

 

대체키

기본키를 제외한 나머지 후보키들

 

 

외래키

다른 테이블의 기본키를 참조하는 속성 또는 속성들의 집합

참조 테이블의 기본키와 동일한 키 속성을 지닌다.

 

 

데이터베이스 무결정 제약조건

데이터베이스에서 데이터의 정확성과 일관성을 보장하기 위해 사용하는 조건이다.

 

도메인 무결성

속성들의 값은 정의된 도메인에 속한 값이어야 한다.

'성별'이라는 속성에 '남', '여'를 제외한 데이터는 제한되어야 한다.

 

개체 무결성

각 릴레이션의 기본키를 구성하는 속성은 NULL이나 중복된 값을 가질 수 없다.

[학생] 릴레이션에서 '학번'을 기본키로 지정했다면 '학번' 속성은 NULL이 되어서는 안된다.

 

참조 무결성

외래키 값은 참조하는 릴레이션의 기본키 값과 동일해야 한다.

즉, 각 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없다.

[수강] 릴레이션에서 '학번' 속성에는 '학생' 릴레이션의 '학번' 속성에 없는 값은 입력할 수 없다.

 

고유 무결성

특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우, 릴레이션의 각 레코드가 가지는 속성 값들은 서로 달라야 한다.

[학생] 릴레이션에서 '이름', '나이'는 서로 같은 값을 가질 수 있지만 '학번'의 경우, 각 튜플은 서로 다른 값을 가져야 한다.

 

NULL 무결성

릴레이션의 특정 속성 값은 NULL이 될 수 없다.

 

키 무결성

각 릴레이션은 최소한 한 개 이상의 키가 존재해야 한다.

 

 

 

https://hongong.hanbit.co.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-databasedb-dbms-sql%EC%9D%98-%EA%B0%9C%EB%85%90/

https://zrr.kr/Nayi

http://www.tcpschool.com/mysql/DB

https://zrr.kr/wuXN

https://iingang.github.io/posts/DB-schema/

https://zrr.kr/jSbg

https://sharpcoder.tistory.com/116

https://iingang.github.io/posts/DB-Integrity-constraint/

https://ssungkang.tistory.com/entry/DATABASE-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-VS-%ED%8C%8C%EC%9D%BC%EC%B2%98%EB%A6%AC-%EC%8B%9C%EC%8A%A4%ED%85%9C