본문 바로가기
CS/DB

[DB] 2. 데이터 모델, 관계형 데이터베이스, SQL

by erase-jeong 2024. 12. 5.

1. 데이터 모델

컴퓨터에 데이터를 저장하는 방식을 정의해 놓은 개념 모형

 

대표 데이터모델 : 계층형, 네트워크형, 관계형, 객체 지향형 등이 있음

 

 

 

2. 계층형 데이터 모델

[그림]

 

- 나뭇가지 형태의 트리(tree)구조를 활용하여 데이터 관련성을 계층별로 나누어 부모 자식 같은 관계를 정의하고 데이터를 관리함.

- 계층형 데이터모델을 이해하기 위해서는 일대다(1:다) 관계의 데이터 구조를 파악해야 함

 

특징

- 상위 개념에 하위 개념이 포함되어 있는 특징

- 하나의 부모 개체가 여러 자시을 가질 수 있음 (o)

- 자식개체는 여러 부모 개체를 가질 수 없다는 제약이 있음

 

=> 일대다 구조의 데이터를 표현하기에는 알맞지만 자식 개체가 여러 부모를 가진 관계는 표현할 수 없음

 

 

 

 

3. 네트워크형 데이터 모델

- 망형 데이터 모델이라고도 함

- 그래프(graph) 구조를 기반으로 함

- 개체 간 관계를 그래프 구조로 연결하므로 자식 개체가 여러 부모 개체를 가질 수 있다는 점에서 계층형 데이터 모델과 차이가 있음

 

 

 

4. 객체 지향형 데이터 모델

[그림]

 

- 객체지향 프로그래밍에서 사용하는 객체 개념을 기반으로 한 데이터 모델

- 객체 지향 프로그래밍처럼 데이터를 독립된 객체로 구성하고 관리하며 상속, 오버라이드 등 객체 지향 프로그래밍에서 사용되는 강력한 기능을 활용할 수 있음

 

 

 

5. 관계형 데이터 모델

- 다른 모델과 달리 '데이터 간 관계(relationship)' 에 초점을 둔다.

 

 

ex. 회사의 사원 정보와 사원이 소속된 부서 정보를 데이터로 관리하는 경우

 

[그림]

 

(1) 사원 정보와 부서 정보를 하나의 묶음으로 관리하면 데이터 구조가 간단해짐

(2) but, 같은 부서 사원들은 부서 정보가 중복되므로 효율적인 관리가 어려워짐

(3)=> 왜냐하면 부서 이름이 바뀌면 해당 부서 사원들은 부서 정보를 일일이 찾아서 모두 변경해 주어야 하기 때문

 

 

=> 따라서 관계형 데이터 모델에서는 각 데이터의 독립 특성만을 규정하여 데이터 묶음을 나눈다.

 

[그림]

 

중복이 발생할 수 있는 데이터(여기서는 부서정보)는 별개의 릴레이션으로 정의한 후

사원 정보에 소속된 부서를 식별하는 '부서 코드'를 포함하여 사원 정보를 데이터와 부서 정보 데이터를 연결함.

 

 

6. 관계형 데이터 모델의 핵심 구성 요소

[그림]

 

이름 설명
개체(entity) 데이터베이스에서 데이터화하려는 사물, 개념의 정보단위
관계형 데이터베이스의 테이블(table) 개념과 대응되며 테이블은 릴레이션(relation)으로 표기하도록 함
속성(attribute) 개체를 구성하는 데이터의 가장 작은 논리적 단위로서 데이터의 종류, 특성, 상태 등을 정의
관계형 데이터베이스의 열(column) 개념과 대응됨
관계(relationship) 개체와 개체 또는 속성 간의 연관성으 ㄹ나타내기 위해 사용함.
관계형 데이터베이스에서는 테이블 간의 관계를 외래키(foreign key) 등으로 구현하여 사용함

 

 

7. 관계형 데이터베이스란?

- 관계형 데이터베이스는 관계형 데이터 모델 개념을 바탕으로 데이터를 저장, 관리하는 데이터베이스를 의미함.

- 관계형 데이터베이스를 관리하는 시스템은 DBMS에 데이터 간의 관계를 강조하기 위한 'relational'을 앞에 붙여 RDBMS. 즉, 관계형 데이터베이스 관리 시스템이라고 부름

 

 - ex. MS-SQL, MYSQL, MariaDB, PostgreSQL , DB2 , 오라클 등 대부분 관계형 데이터베이스 관리 시스템 이거나 최소한 부분적으로 관계형 데이터베이스를 사용하고 있다. 

 

 

8. SQL이란?

- Structed Query Language의 약자

- RDBMS에서 데이터를 다루고 관리하는 데 사용하는 데이터베시으 질의 언어

- 간단히, 'SQL 정의를 'RDBMS에게 데이터에 관해 물어보고 결과를 얻는다' 정도로만 기억하면 됨