안녕하세요. SQLER의 코난 김대우입니다. 
이번 강좌에서는, 11-1. 관계형 데이터베이스 이해 - 관계형 모델을 진행 하겠습니다.


SQLER에서 진행되는, 챗GPT와 함께 배우는 SQL Server 강좌 목록

 

이번에 진행할 강좌는 관계형 데이터베이스 이해 - 관계형 모델입니다.

 

 

 

TL;DR

데이터베이스에 대한 깊은 이해를 위해 정보환경을 소개하고, 관계형 모델의 개념과 용어를 설명합니다. 이 강좌는 관계형 데이터베이스 모델링의 기반을 제공하며, 데이터베이스 설계에 관심이 있는 분들에게 유용한 내용입니다.


지난 1-2. 왜 데이터베이스를 만들었으며 왜 사용하는가? 강좌에서 간략히 정보환경과 왜 데이터베이스를 만들고 사용하는지 소개해 드렸습니다. 이 강좌에서는 데이터베이스 설계 과정을 수행하기 전, 데이터베이스에 대한 이해를 높이기 위한 정보환경에 대해 조금 더 깊게 소개하고, 관계형 모델에 대해 논의합니다.


이 강좌는 관계형 데이터베이스 모델링에 대한 원론입니다. 이어지는 강좌와는 별개의 독립적인 내용이며, 데이터베이스 설계에 대해 깊이 있는 학습을 원하면, 그때 천천히 읽어 보셔도 됩니다.


이 챕터에서는 관계형 데이터베이스 용어를 그대로 사용합니다. 오래전 출간된 국내 데이터베이스 개론 관련 책에 오역이 많아, 영문 키워드를 함께 표기하며, SQLER의 이전 강좌 내용을 근간으로 일부 챗GPT를 활용해 작성되었습니다.


☑️ 챗GPT 활용: 관계형 데이터베이스 모델링에 대해서 알려줘

 

 

관계형 모델(Relational Model)이란

관계형 모델은 관계형 데이터베이스를 구축하는 데에 사용되는 기본적인 개념입니다. 
관계형 모델 기본 개념은 E.F. Codd 박사가 1970년에 발표한 논문 "A Relational Model of Data for Large Shared Data Banks"에서 처음 소개되었습니다.
50년 전에 작성된 논문이 오늘, 2023년에도 다시 언급되고 논의된다는 사용된다는 사실이 의미심장합니다. 이 논문을 풀어 적은 훌륭한 포스트도 있고, ACM 논문 PDF도 있으니 참고하세요.


☑️ 챗GPT 활용: 관계형 데이터베이스 시스템 개념을 제안하고 개발한 E.F. Codd 박사에 대해서 알려줘

 

이 논문에서는, 관계형 데이터베이스에 대한 주요 개념을 소개하고, SQLER 강좌에서도 상세하게 진행된, 테이블 / 기본키 / 외래 키 제약 등의 내용이 정립되어 오늘날까지 사용되고 있습니다.

 

테이블(Table)

관계형 모델에서 데이터는 테이블로 구성됩니다. 테이블은 로우(행)와 컬럼(열)의 집합, 각 로우는 레코드, 각 컬럼은 속성(attribute)으로 설정합니다. 예를 들어, 고객 테이블은 각 로우는 특정 고객의 정보를 담고 있고, 컬럼은 고객의 이름, 주소, 전화번호 등의 속성들을 의미합니다.

 

기본 키(Primary Key)

각 테이블은 기본 키라는 유일한 식별자를 가집니다. 기본 키는 각 레코드를 고유하게 식별하는 역할을 수행합니다. 일반적으로 기본 키는 특정 컬럼에 지정하고, 중복되지 않아야 합니다.

 

외래 키(Foreign Key)

외래 키는 다른 테이블의 기본 키를 참조하는 컬럼입니다. 두 테이블 간 관계를 구성할 때 사용됩니다. 외래 키를 사용하면, 한 테이블의 데이터를 다른 테이블과 연결할 수 있습니다.

관계형 모델은 사용하기 쉽고, 데이터 일관성과 무결성을 보장하는 훌륭한 기능을 제공합니다. 또한, 데이터의 논리적 구조를 잘 표현할 수 있는 여러 기능이 제공되며, 관계형 데이터베이스 모델은 2023년 현재까지 다양한 관계형 데이터베이스의 근간으로 가장 폭넓게 사용됩니다.

 

 

관계형 데이터 구조 - 애트리뷰트, 도메인, 릴레이션

관계형 데이터베이스에서 데이터는 릴레이션(Relation)이라는 테이블 구조로 표현합니다. 릴레이션은 열(Column)과 행(Row)으로 구성됩니다. 각 행은 레코드(Record)를 나타내고, 각 열은 애트리뷰트(Attribute). 도메인(Domain)은 애트리뷰트가 가질 수 있는 값들의 집합을 의미.

 

애트리뷰트(Attribute)

애트리뷰트는 릴레이션의 열(Column)을 의미합니다. 예를 들어, 학생 릴레이션에서는 이름, 나이, 학번 등의 열이 애트리뷰트입니다. 애트리뷰트는 해당 레코드에 대한 정보를 포함합니다.

 

도메인(Domain)

도메인은 애트리뷰트 값을 제한합니다. 즉, 애트리뷰트의 데이터형과 제약 조건을 의미합니다. 예를 들어, “나이” 애트리뷰트의 도메인은 0 이상의 정수 값으로 구성될 수 있고, "이름" 애트리뷰트의 도메인은 문자열로 구성될 수 있습니다.
예를 들어, 이런 고객 릴레이션(Customer Relation)이 있다고 가정해 보겠습니다.

 
ID
이름 나이 주소
1 김대우 30 성남시
2 박서준 31 서울시
3 허성태 25 부산시


위의 표는 "고객" 릴레이션의 예시 데이터입니다. 여기서 "ID", "이름", "나이", "주소"는 애트리뷰트이고, 각각 다음과 같은 도메인을 가집니다:


- ID: 1, 2, 3와 같은 정수 값을 가질 수 있는 도메인
- 이름: “김대우”, “박서준” 같은 문자열 값을 가질 수 있는 도메인
- 나이: 30, 31과 같은 정수 값을 가질 수 있는 도메인
- 주소: “성남시”, “서울시”와 같은 문자열 값을 가질 수 있는 도메인


이렇게 관계형 데이터베이스에서는, 릴레이션을 구성하는 애트리뷰트들이 적절한 도메인에 속하는 값을 가지도록 설계됩니다. 이런 설계 과정을 통해 데이터의 유형과 제약 조건을 명확하게 정의하여, 데이터의 무결성과 일관성을 보장하게 됩니다.

 

 

릴레이션 스키마(Relation schema 또는 scheme)

릴레이션 스키마(Relation Schema)는 릴레이션의 논리적 설계를 의미합니다. 즉, 데이터베이스에 포함되는 릴레이션의 구조를 정의합니다.


릴레이션 스키마는 릴레이션의 이름과 해당 릴레이션에 속하는 애트리뷰트들의 리스트로 구성합니다. 


데이터베이스 설계를 수행할 때, 릴레이션 스키마는 데이터베이스의 논리적 구조를 설계하는 중요한 단계입니다. 각 릴레이션 스키마는 해당하는 릴레이션의 이름과 해당 릴레이션에 속하는 애트리뷰트들의 이름 및 도메인을 정의합니다.


예를 들어, 다음은 "학생" 릴레이션의 릴레이션 스키마 예입니다:

학생 (ID: integer, 이름: string, 나이: integer, 주소: string)


위의 릴레이션 스키마는 "학생" 릴레이션의 이름과 해당 릴레이션에 속하는 애트리뷰트들의 이름과 데이터 타입(도메인)을 정의합니다. ID와 나이 애트리뷰트는 정수(integer) 값을 가지고, 이름과 주소 애트리뷰트는 문자열(string) 값을 가지는 것으로 정의합니다.

 

릴레이션 스키마는 정적 성질(Static nature)을 가지며, 정적 성질은 릴레이션 스키마가 시간에 무관하다는 것을 의미합니다. 릴레이션 스키마는 릴레이션의 구조를 정의하기 위해 사용되는 논리적인 개념으로, 실제 데이터가 포함되지 않습니다. 따라서, 데이터의 변화에 영향을 받지 않습니다. 이러한 릴레이션 스키마를 통해 데이터베이스 구조를 설계하고, 프로그래밍 언어의 데이터형 개념과 비슷하게 릴레이션의 구조를 정의할 수 있습니다.
 

 

SQL 강좌 책 구매

강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다. 

 

책구매 링크: 챗GPT와 함께하는 마이크로소프트 SQL Server 2022 

책구매링크.png

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 28565
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 15535
2294 SQL강좌: 12-1. 인덱스 생성과 관리 - 인덱스(Index) 소개 file 코난(김대우) 2023.08.18 77
2293 SQL강좌: 11-8. 관계형 데이터베이스 이해 - 데이터베이스 구현 코난(김대우) 2023.08.18 31
2292 SQL강좌: 11-7. 관계형 데이터베이스 이해 - 데이터베이스 물리적 설계 코난(김대우) 2023.08.18 27
2291 SQL강좌: 11-6. 관계형 데이터베이스 이해 - 데이터베이스 논리적 설계 코난(김대우) 2023.08.18 26
2290 SQL강좌: 11-5. 관계형 데이터베이스 이해 - 데이터베이스 설계 요구사항(Requirements) 분석과 개념적 설계 코난(김대우) 2023.08.18 23
2289 SQL강좌: 11-4. 관계형 데이터베이스 이해 - 데이터베이스 설계 목표와 고려사항 코난(김대우) 2023.08.18 21
2288 SQL강좌: 11-3. 관계형 데이터베이스 이해 - 데이터베이스 설계 단계 file 코난(김대우) 2023.08.18 25
2287 SQL강좌: 11-2. 관계형 데이터베이스 이해 - 데이터베이스 생명주기 file 코난(김대우) 2023.08.18 25
» SQL강좌: 11-1. 관계형 데이터베이스 이해 - 관계형 모델 코난(김대우) 2023.08.18 42
2285 SQL강좌: 10-4. T-SQL 프로그래밍 - 공통 테이블 식(CTE-Common Table Expression) 코난(김대우) 2023.08.18 57
2284 SQL강좌: 10-3. T-SQL 프로그래밍 - 변수, 조건문(IF-ELSE), 반복문(WHILE), CASE 표현식 코난(김대우) 2023.08.18 35
2283 SQL강좌: 10-2. T-SQL 프로그래밍 - 일괄처리(Batch) 코난(김대우) 2023.08.18 38
2282 SQL강좌: 10-1. T-SQL 프로그래밍 - 소개 코난(김대우) 2023.08.18 34
2281 SQL강좌: 9-3. 커서 - 현업에서 커서 사용 및 주의사항 코난(김대우) 2023.08.18 56
2280 SQL강좌: 9-2. 커서 - 커서 구문 코난(김대우) 2023.08.18 31
2279 SQL강좌: 9-1. 커서(CURSOR) - 커서 소개 코난(김대우) 2023.08.18 53
2278 SQL강좌: 8-7. 저장 프로시저 - 프로시저 캐시와 RECOMPILE 코난(김대우) 2023.08.18 47
2277 SQL강좌: 8-6. 저장 프로시저 - 종속성(Dependency) 확인 코난(김대우) 2023.08.18 58
2276 SQL강좌: 8-5. 저장 프로시저 - OUTPUT 파라미터 코난(김대우) 2023.08.18 54
2275 SQL강좌: 8-4. 저장 프로시저 - 동적 SQL(Dynamic SQL)과 SQL 주입(Injection) 공격 코난(김대우) 2023.08.18 71





XE Login