본문 바로가기
Web Study/DataBase

데이터베이스 개론 & SQL - 1

by 쿠리의일상 2024. 1. 31.

https://www.inflearn.com/course/%EB%B0%B1%EC%97%94%EB%93%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B0%9C%EB%A1%A0/dashboard

 

[지금 무료] 시니어 백엔드 개발자가 알려주는 데이터베이스 개론 & SQL 강의 - 인프런

백엔드 개발자라면 꼭 알아야 할 데이터베이스와 SQL! 이해하기 쉽게 설명하는 것을 최우선으로 합니다., 데이터베이스 + SQL, 누구나 쉽게! 📕 왕초보도 이해하기 쉬운 DB + SQL 기본기! 시니어 백

www.inflearn.com

DB 설계 및 구조 중에 SQLD을 땄음에도 전혀 써먹질 못해... 강의를 봐야함을 느끼고 여러 강의 중 해당 강의 내용을 정리했다. 일단 무료로 접근이 가능하여 접근성이 좋았던게 선택의 이유였다. 차근히 다른 강의도 여럿 볼 예정이다.

 

데이터베이스 개론

 

DB

전자적으로 저장되고 사용되는 관련있는 데이터들의 조직화된 집합

 

DBMS

사용자에게 DB를 정의하고 만들고 관리하는 기능을 제공하는 소프트웨어 시스템 - PostgreSQL, MySQL, MSSQL, ...

DB를 정의하다보면 부가적인 데이터가 발생함, 이를 metadata 라고 한다.

DB 메타 데이터는 database를 정의하거나 기술하는 data, catalog라고도 부른다. (데이터 유형, 구조, 제약 조건, 보안, 저장, 인덱스, 사용자 그룹 등)
이러한 메타 데이터도 DBMS에 저장 관리 된다.

 

DB system

database + DBMS + application

 

 


Data models

DB 구조를 기술하는데 사용될 수 있는 개념들이 모인 집합으로 DB 구조를 추상화하여 표현할 수 있는 수단을 제공한다.

데이터 모델은 추상화 수준과 DB 구조화 방식이 조금씩 달라 여러 종류가 있다.

DB에서 읽고 쓰기 위한 기본적인 동작들을 포함한다.

  • conceptual (high level) data models : 개념 모델
    • 일반 사용자들이 쉽게 이해할 수 있는 개념 모델
    • 추상화 수준이 제일 높음
    • Entity relationship diagram
  • logical (representational) data models : 논리 모델
    • 이해가 쉬우면서도 디테일하게 DB를 구조화할 수 있는 개념 제공
    • 데이터가 컴퓨터에 저장될 때의 구조와 유사하게 DB 구조화를 가능하게 함
    • 특정 DBMS나 storage 에 종속되지 않는 수준에서 DB를 구조화할 수 있는 모델
      • relational data model : SQL Server, Oracle, MySQL...
      • object data model
      • object-relational data model : PostgreSQL
  • physical (low level) data models : 물리 모델
    • 컴퓨터가 데이터가 어떻게 파일 형태로 저장되는지 기술할 수 있는 수단, 실제 컴퓨터에서 저장되는 것과 같음
    • data format, data orderings, access path(데이터 검색을 빠르게 하기 위한 구조체, index) 등

 

Schema

data model 을 바탕으로 database 구조를 기술한 것으로 스키마는 데이터베이스를 설계할 때 정해져, 한번 정해진 이후에는 잘 바뀌지 않는다.

 

State ( snapshot )

데이터베이스에 있는 실제 데이터는 자주 바뀌므로 특정 시점에 데이터베이스에 있는 데이터를 의미

또는 데이터베이스에 있는 현재 인스턴스의 집합이라고도 한다.

 

 


3 schema architecture

database system을 구축하는 architecture 중 하나로 user application으로부터 물리적인 데이터베이스를 분리시키는 목적으로 3가지 레벨이 존재한다.

  1. external schema : 외부 스키마
    • 특정 유저들이 필요로 하는 데이터만 표현하여 그외 필요 없는 데이터는 숨김
    • 논리 데이터 모델을 통해 표현
    • external views, user views 라고도 불림
  2. conceptual schema : 개념 스키마
    1. 전체 데이터베이스에 대한 구조를 기술하고 물리적인 저장 구조에 관한 내용은 숨김
    2. Entity, data type, relationship, user operation, constraint에 집중함
    3. 논리 데이터 모델을 통해 기술
  3. internal schema : 내부 스키마
    • 물리적으로 데이터가 어떻게 저장되는지 물리 데이터 모델을 통해 표현
    • data storage, structure access path 등 실체가 있는 내용을 기술

즉, 각 레벨을 독립시켜 어느 레벨에서의 변화가 상위 레벨에 영향을 주지 않기 위한다. internal schema의 변화를 conceptual schema에서 바꾸는 것보다 상대적으로 conceptual schema 의 변화를 external schema에서 바꾸는 것이 더 어려워서 DBMS 가 3가지 스키마 레벨을 명시적으로/완벽하게 나누지는 않는다.

하지만 기억해야할 점은 결국 데이터가 존재하는 곳은 internal level 이란 것이다.

 

 


DDL (Data Definition Language)

conceptual schema를 정의하기 위해 사용되는 언어 (internal schema 까지 정의할 수 있는 경우도 있음)

 

SDL (Storage Definition Language)

internal schema를 정의하는 용도로 사용되는 언어 다만 요즘 relational DBMS에선 SDL이 거의 없고 파라미터 등의 설정으로 대체된다.

 

VDL (View Definition Language)

external schema 를 정의하기 위해 사용되는 언어지만 대부분 DBMS에선 DDL 이 VDL 역할까지 수행한다.

 

DML (Data Manipulation Language)

데이터베이스에 있는 실제 데이터를 활용하기 위한 언어로 Data 추가, 삭제, 수정, 검색 등의 기능을 제공한다.

 

이러한 언어들이 SQL이라는 통합된 언어로 존재한다.

 

 

 

관계형 데이터베이스

 

set 

서로 다른 element 를 가지는 collection 으로 하나의 set에서 중복된 element는 없고 각 elements의 순서는 중요하지 않음

만약, set A = { 1, 2 } / set B = { p, q, r } 이 존재할 때 모든 경우의 수인 Cartesian product 는 이와 같다. (AxB) = { (a, b) | a ∈ A and b ∈ B }

set A와 set B 둘 사이에는 binary relation ⊆ A x B 을 뜻하며 이는 A x B의 값(카르테시안 곱)의 부분 집합이 관계가 된다는 의미이다. 

이를 바탕으로 set X1, X2, ... Xn 이 있다고 하면 X1 x X2 x ... x Xn 이 카르테시안 곱이 되고, 각 set들의 관계인 n-ary relation 은 Xn의 카르테시안 곱의 부분 집합이 되는 것이다. ( n-ary relation ⊆  X1 x X2 x ... x Xn )

 

즉 relation은 Cartesian product 의 부분집합이고 튜플들의 set(집합)이 되는 것이다.

 

Relational data model

student relation을 예를 들어 relation data model로 나타내면,

1. domain 정의

  • students_ids : 학번 집합, 7자리 integer
  • human_names : 사람 이름 집합, 문자열
  • university_grades : 대학교 학년 집합 { 1, 2, 3, 4 }
  • major_names : 전공 이름 집합
  • phone_numbers : 핸드폰 번호 집합

2. student relation's attribute

  • students_ids - id
  • human_names - name
  • university_grades - grade
  • major_names - major
  • phone_numbers - phone_num
  • phone_numbers - emer_phone_num (비상 연락망)

3. relational data model

relational data model 에서 각 set들의 튜플 사이의 관계를 나타낼 때 테이블로 나타내는 것이 좋기 때문에 relation은 table을 의미하게 된 것이다.

relation name : Student

id name grade major phone_num emer_phone_num
111 강감찬 4 컴퓨터공학 010-xxxx-xxxx 010-xxxx-xxxx
222 홍길동 2 전자 010-yyyy-yyyy 010-yyyy-yyyy

여기서 각각의 id, name, ... 에 해당하는 컬럼은 attribute (속성)이라고 부르며, 실제 값이 들어간 행은 tuple(튜플)이라고 부른다.

개념 설명
domain set of atomic values
domain name domain
attribute domain이 relation에서 맡은 역할
tuple 각 attribute 값으로 이루어진 리스트
relation set of tuple
relation name relation 이름

 

relation schema

relation의 구조를 나타내며 relation 이름과 attributes 리스트로 표기된다.

 

degree

relation schema에서 attribute(컬럼) 의 수를 의미한다.

 

relational database

relational data model 에 기반한 구조화된 데이터베이스로 여러 개의 relations 로 구성된다.

 

 


relation의 특징

  • relation은 중복된 tuple 을 가질 수 없음 (relation은 튜플들의 집합set of tuple 이므로)
  • relation의 tuple을 식별하기 위한 attribute 의 부분 집합을 key 로 설정
  • tuple의 순서는 중요하지 않음
  • 하나의 relation에서 attribute 이름은 중복될 수 없음
  • 하나의 tuple에서 attribute의 순서는 무관
  • attribute는 더이상 나눌 수 없어야 함
    • 예를 들어 address attribute의 경우, 서울시 강남구 청담동 ... 의 경우 나눠지는 attribute 므로, atomic 하지 않으므로 불가함

 

 


Null

  1. 값이 존재하지 않음
  2. 값이 존재하나 아직 그 값이 무엇인지 알지 못함
  3. 해당 사항과 관련이 없음

3가지 중 하나로 사용된다.

 


Key

superkey

relation에서 tuple을 unique하게 식별할 수 있는 속성 set을 의미한다.

예를 들어, PLAYER(id, name, team_id, back_num, birth_date) 에서 id가 고유한 값이라면 슈퍼키는 { id, name}, {id,name, team_id, back_num, birth_date}, {name, team_id, back_num} ... 등이 될 수 있다. 즉 id를 포함한 set은 모든 슈퍼키가 될 수 있다는 의미이다.

 

candidate key

어느 한가지의 attribute 라도 제거하면 unique하게 tuple을 식별할 수 없는 superkey

예를 들어, PLAYER(id, name, team_id, back_num, birth_date)의 candidate key는 {id}, {tema_id, back_num} 만 될 수 있다.

 

primary key

relation에서 tuple을 unique하게 식별하기 위해 선택된 candidate key

예를 들어, PLAYER(id, name, team_id, back_num, birth_date)의 primary key는 {id}나 {team_id, back_number} 둘 중 하나가 될 수 있다. 여기서 primary key는 attribute가 적은 것을 고르는 것이 편하고 관례므로 { id }가 될 것이다.

 

unique key

primary key가 아닌 candidate key이며, alternate key라고도 한다.

예를 들어, PLAYER(id, name, team_id, back_num, birth_date)의 unique key는 primary key인 {id}를 제외한 {team_id, back_number} 가 될 것이다.

 

foreign key

다른 relation의 PK를 참조하는 속성 집합

PLAYER(id, name, team_id, back_num, birth_date)와 TEAM(id, name, manager)가 있을 때 foreign key는 PLAYER의 {team_id}가 된다.

 

 


constraints

relational DB의 relations들이 항상 지켜줘야 하는 제약 사항을 의미

 

1. implicit constraints

relational data model 자체가 가지는 constraint로 위에 기재했듯이 relation은 중복되는 tuple을 가질 수 없고, relation 내에서 같은 이름의 attribute를 가질 수 없다는 점이 해당된다.

 

2. schema-based constraints

주로 DDL을 통하여 스키마에 직접 명시하는 제약 사항으로 explicit constraints 라고 부르기도 한다.

  • domain constraints
    • attribute의 value 는 해당 속성의 domain에 속한 value 여야함
  • key constraints
    • 서로 다른 tuple 은 같은 key value를 가질 수 없음
  • Null value constraint
    • attribute 가 Not Null 로 명시됐을 때 Null을 값으로 가질 수 없음
  • Entity integrity constraint
    • primary key는 Null value 를 가질 수 없음
  • referential integrity constraint
    • FK는 PK와 도메인이 같아야함
    • PK에 없는 value를 FK가 값으로 가질 수 없음

이러한 제약 사항은 데이터베이스의 일관되고 올바른 값이 들어갈 수 있도록 하기 위한 것이다.

 

'Web Study > DataBase' 카테고리의 다른 글

데이터베이스 개론 & SQL - 3  (0) 2024.02.03
데이터베이스 개론 & SQL - 2  (0) 2024.02.01
SQLD 합격! 그리고 DAsP 도전  (0) 2023.12.21
SQL - 실체 엔터티에 대해...  (0) 2023.12.11
SQLD 그룹함수  (1) 2023.11.20