profile image

L o a d i n g . . .

728x90

Relational Model 

이번 포스팅에서는 다양한 데이터베이스가 탄생할 수 있었던 계기인 관계형 모델(Relational Model)에 대해 알아보겠습니다. 

개발자에게 가장 큰 관심사는 역시 데이터베이스입니다. 그럼 데이터베이스가 무엇인지부터 살펴보겠습니다. 

데이터베이스는 데이터를 쉽게 접근, 관리하고 업데이트할 수 있도록 구성된 데이터의 모음입니다. 

 

따라서 우리는 데이터를 flat file에 저장을 하던, csv에 저장을 하던 상관없이 데이터를 저장하는 것을 데이터베이스라고 부를 수 있습니다. 하지만 데이터를 아무런 생각 없이 저장하게 된다면 무슨 문제가 발생할 수 있을까요?

첫 번째로는 데이터가 정확한지 확신할 수 없습니다. 만약 중복 데이터가 있다면 어떤 게 정말 내가 원하는 데이터인지 어떻게 알 수 있을까요?

두 번째로는 데이터를 효율적으로 읽기가 어렵습니다. 내가 원하는 데이터 1개를 위해서 모든 파일을 다 읽어오면 너무 비효율적이겠죠?

셋째로는 데이터베이스에 데이터를 어떻게 저장할지도 문제입니다. 만약 여러 프로세스나 스레드가 동시에 동일한 데이터베이스에 접근해서 데이터를 쓴다면 동시성 문제도 해결해야겠죠? 또 다른 문제로는 내가 쓴 데이터가 성공적으로 저장됐는지 어떻게 알 수 있을까요? 만약 쓰는 도중에  서버가 다운되면 내가 쓴 데이터는 어떻게 될까요? 

 

단순한 구조의 데이터베이스는 위와 같은 문제를 해결할 수 없습니다. 따라서 개발자들은 DBMS(Database Management System)를 통해서 데이터를 관리합니다. 일반적인 DBMS는 다음과 같은 기능을 제공합니다. 

- 스키마 정의
- 데이터 저장
- 데이터 질의
- 데이터 업데이트
- 데이터베이스 관리 기능 

 

초창기 DBMS는 문제가 많았습니다. DBMS 기능에서 논리적인 영역과 물리적인 영역이 너무 강하게 결합된 것이 가장 큰 문제였습니다. 예를 들어 개발자가 조회 쿼리를 사용한다고 하면 단순히 조회 쿼리만 명시하는 게 아니라 데이터베이스에서 어떻게 효율적으로 데이터를 조회해야 하는지 고려해야 했습니다. 그 당시에는 통일된 데이터베이스 포맷이 있는 것도 아니라서 데이터베이스 별로 특성을 파악해야 했습니다. 

이를 해결하기 위해 등장한 모델이 관계형 모델(Relational Model)입니다. 관계형 모델의 특징은 다음과 같습니다. 

- 데이터베이스를 단순한 자료구조에 저장한다. 
- High-level language로 데이터베이스에 접근하고 실제로 데이터에 접근하는 방법은 DBMS가 제공한다. 
- 실제로 데이터를 저장하는 방법은 DBMS가 제공한다. 

 

다음과 같은 Relational model이 있다고 가정하고 용어에 대해 설명드리겠습니다. 

name year country
데비 2013 KR
개발자  2022 KR
학생 2021 JP 

관계형 데이터베이스의 맥락에서, 관계는 행과 열로 구성된 데이터 테이블을 의미합니다. 테이블의 각 행은 하나의 레코드를 나타내고, 각 열은 그 레코드에 대한 특정 정보를 나타냅니다. "관계"라는 용어가 사용되는 이유는 테이블의 데이터가 특정 주제 또는 엔티티(예: 사람, 제품)와 관련되어 있기 때문입니다. 테이블의 열은(name, year, country) 엔티티의 속성이나 특성을 정의하고, 행은 각 레코드에 대한 그 속성의 값을 포함합니다.  관계형 모델에서 각 레코드를 고유하게 식별하는 수단으로 Primary key를 사용합니다. 또한 레코드 간 관계를 나타내기 위해서 Foreign key를 사용하기도 합니다. 

 

관계형 모델을 사용하는 데이터베이스에서 데이터를 조회할 때 등장하는 개념으로 관계 대수(Relational Algebra)가 있습니다. 이는 관계형 모델에서 관계를 다루는 연산으로, 검색 질의를 기술하는 데 사용됩니다. Relational Algebra에 대해 자세히 알고 싶으시다면 해당 포스팅을 참고하세요. 

https://15445.courses.cs.cmu.edu/fall2021/slides/01-introduction.pdf

 

튜플(tuple) vs 레코드(record) 

튜플은 값의 집합을 포함하는 데이터 구조이고, 레코드는 데이터베이스에 저장된 컬렉션입니다. 두 개 모두 값의 집합을 저장하므로 유사하지만, 다릅니다. 튜플은 서로 연관된 값의 집합을 저장하는 데 사용됩니다. 예를 들어 공간의 점의 좌표 또는 사람의 세부 정보가 그렇습니다. 반면에, 레코드는 일반적으로 데이터베이스에 고객 또는 직원과 같은 특정 개체(entity)에 대한 정보를 저장하는 데 사용됩니다. 레코드의 필드는 데이터베이스 테이블의 열에 해당하고, 각 레코드는 테이블의 한 행을 나타냅니다.

엄밀히 말하면 이 두 개념이 다르지만 데이터베이스에서 연관된 값을 집합을 표현한다는 점에서 유사합니다. 따라서 향후 포스팅에서는 이 두 용어를 혼용해서 사용하고자 합니다. 

마무리

다음 포스팅에서는 관계형 모델과 관계형 대수를 활용한 관계형 데이터베이스 관리 시스템(RDBMS)에서는 어떤 형태의 언어로 데이터를 조회하는지 알아보겠습니다. 

728x90
복사했습니다!