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에 대해 자세히 알고 싶으시다면 해당 포스팅을 참고하세요.
튜플(tuple) vs 레코드(record)
튜플은 값의 집합을 포함하는 데이터 구조이고, 레코드는 데이터베이스에 저장된 컬렉션입니다. 두 개 모두 값의 집합을 저장하므로 유사하지만, 다릅니다. 튜플은 서로 연관된 값의 집합을 저장하는 데 사용됩니다. 예를 들어 공간의 점의 좌표 또는 사람의 세부 정보가 그렇습니다. 반면에, 레코드는 일반적으로 데이터베이스에 고객 또는 직원과 같은 특정 개체(entity)에 대한 정보를 저장하는 데 사용됩니다. 레코드의 필드는 데이터베이스 테이블의 열에 해당하고, 각 레코드는 테이블의 한 행을 나타냅니다.
엄밀히 말하면 이 두 개념이 다르지만 데이터베이스에서 연관된 값을 집합을 표현한다는 점에서 유사합니다. 따라서 향후 포스팅에서는 이 두 용어를 혼용해서 사용하고자 합니다.
마무리
다음 포스팅에서는 관계형 모델과 관계형 대수를 활용한 관계형 데이터베이스 관리 시스템(RDBMS)에서는 어떤 형태의 언어로 데이터를 조회하는지 알아보겠습니다.
'Database > DBA급 개발자로' 카테고리의 다른 글
[Database] DBA급 개발자로 - #6 Hash Table (0) | 2022.09.04 |
---|---|
[Database] DBA급 개발자로 - #5 Buffer Pools (0) | 2022.09.03 |
[Database] DBA급 개발자로 - #4 Database Storage 2/2 (0) | 2022.09.03 |
[Database] DBA급 개발자로 - #3 Database Storage 1/2 (0) | 2022.09.01 |
[Database] DBA급 개발자로 - #2 Intermediate SQL (0) | 2022.08.31 |