⚠️ 공부한 내용을 정리하는 공간입니다. 설명이 부족하거나 옳바르지 못한 부분이 있을 수 있습니다.
옳바르지 못한 내용을 발견하셨다면 댓글로 알려주시길 부탁드립니다. 수정하도록 하겠습니다.
오늘의 사족
안녕하시렵니까? 매일 포스팅하기로 결심한지 3일차 되는 날입니다. 솔직히 매일 보고서 같은 이론 글을 작성하는 것이라서 자신만의 대나무 숲에 글을 올리는 마음으로 글을 쓰고 있습니다. 다들 어떤 경로로 저의 블로그에 들어오셨는지 모르겠지만 댓글로 남겨주시는 따뜻한 격려와 응원의 말을 보며 매일 동기부여를 얻고 있는 중입니다. 감사드립니다. 그래서 앞으로 글을 올릴 때마다 글의 주제와 상관없는 저의 일화나 감정을 작성하는 <오늘의 사족> 코너를 추가하고자 합니다. 이런 코너라도 있어야 아이스브레이킹 느낌으로 글에 몰입하기 전 가볍게 마인드를 스트레칭할 수 있다고 생각하기 때문이죠. 요즘 날이 추워지는 것을 하루 지날 때마다 느끼고 있습니다. 모두들 감기 조심하시고 따뜻하고 행복한 겨울을 보내시길 바랍니다.
<목차>
1. Relational Database이란?
2. Relational Algebra
1. Relational Database이란?
이전 글에서 데이터베이스를 설명하면서 두 객체의 Relation을 예시로 들어 설명했었다. 회원 객체와 트레이너 객체는 속성을 가지고 두 객체는 One-to-Many 관계를 맺고 있다는 것을 알 수 있다.
회원 릴레이션
회원 번호 | 회원 이름 | PT 횟수 | 전화번호 | 집주소 | 담당 트레이너 번호 |
1 | 김가나 | 10 | 010-****-**** | A마을 | 3 |
2 | 김다라 | 32 | 010-****-**** | A마을 | 2 |
3 | 김마바 | 13 | 010-****-**** | A마을 | 1 |
4 | 김염소 | 1 | 010-****-**** | B마을 | 3 |
5 | 김박하 | 23 | 010-****-**** | C마을 | 2 |
트레이너 릴레이션
트레이너 번호 | 트레이너 이름 | 전화번호 | 집주소 |
1 | 김쭁극 | 010-****-**** | B마을 |
2 | 뎩쓰 | 010-****-**** | A마을 |
3 | 옦택견 | 010-****-**** | B마을 |
회원 테이블과 트레이너 테이블은 회원 릴레이션, 트레이너 릴레이션이라고도 불린다. 즉, 테이블 = Relation과 같은 말이다.
우리가 흔히 알고 있는 테이블의 구성요소로는 행(Row)과 열(Column)이 있다. 릴레이션도 행과 열이 있는데 릴레이션에서는 Tuple(행), Attribute(열)을 의미한다.
⬇ 같은 말 다른 표현
Table | Relation | File |
Row | Tuple | Record |
Column | Attribute | Field |
이제 Relation은 어떤 특징을 가지는지 알아보자.
위 회원 릴레이션에 행과 열이 존재한다는 것을 알고 있다. 노란 박스가 나타내는 속성은 회원번호 속성으로 회원 번호와 관련된 속성값을 가진다. 이를 릴레이션에서 Attribute라고 부른다. 반면에 초록 박스가 나타내는 것은 서로 다른 속성값을 나타내고 있다. 이를 릴레이션에서 Tuple이라고 부른다. 이렇게 릴레이션은 객체의 속성을 행과 열로 나타낸 이차원 상의 테이블을 의미한다.
Relational Database는 위에서 설명한 Relation들의 집합이다. 각 객체는 릴레이션에 저장되며 객체의 속성들은 릴레이션에서 Attribute가 된다. 공통된 Attribute을 통해 관계를 맺으며 Relation의 각 cell에는 단 하나의 값만 허용된다는 것을 주의하자.
이렇게 릴레이션이 무엇이고 어떻게 이루어져있는지 표를 통해 확인할 수 있었다. 하지만 데이터베이스를 디자인할 때 언제나 표를 그려서 데이터베이스의 속성과 관계를 확인하는 것은 상당히 비효율적이다. 그래서 알아야 하는 것이 바로 데이터베이스 구조를 타이핑하여 표현하는 방법이다.
어떻게 데이터베이스 구조를 타이핑하여 표현하는가?
데이터베이스는 객체와 객체의 속성, 객체들 간의 관계를 저장한다. 이러한 데이터베이스의 특징을 통해 데이터베이스를 '객체이름 (객체의 기본키에 해당하는 속성,객체에 해당하는 속성들)' 표현할 수 있다.
⬇ 회원
회원 번호 | 회원 이름 | PT횟수 | 전화번호 | 집주소 | 담당 트레이너 번호 |
⬇ 트레이너
트레이너 번호 | 트레이너 이름 | 전화번호 | 집주소 |
위 데이터베이스 예시를 타이핑하여 표현해보자!
1. 객체에 해당하는 이름을 찾는다.
-> 회원, 트레이너
2. 객체의 속성을 찾는다.
-> 회원: 회원번호, 회원 이름, PT횟수, 전화번호, 집주소, 담당 트레이너 번호
-> 트레이너: 트레이너 번호, 트레이너 이름, 전화번호, 집주소
3. 객체에서 기본키에 해당하는 속성을 찾은 후 밑줄을 긋는다.
-> 회원: 회원 번호
-> 트레이너: 트레이너 번호
위 3단계를 모두 수행하였다면 데이터베이스 구조를 글로 표현할 수 있다.
회원 (회원번호, 회원이름, PT횟수, 전화번호, 집주소, 담당 트레이너 번호)
트레이너 (트레이너번호, 트레이너이름, 전화번호, 집주소)
2. Realtional Algebra(관계대수)
위에서 릴레이션이 무엇인지 그리고 릴레이션을 표가 아닌 글로 표현하는 방법까지 알아보았다. 이제는 본격적으로 릴레이션을 사용자가 원하는 결과를 산출할 수 있도록 해주는 이론적인 방법인 Relational Algebra에 대해 알아보자.
관계대수는 Relational Database를 처리하는 이론적인 방법으로 기존 테이블(=릴레이션)을 사용하여 원하는 데이터를 지닌 새로운 테이블을 만드는 연산도 포함한다. 모든 명령어는 Giving과 테이블 이름으로 끝난다.
관계대수를 어떻게 사용하는지 알아보기 전에 관계대수에는 어떠한 명령어가 있는지 알아야 할 필요가 있다.
SELECT: 기존 테이블에서 조건에 해당하는 row를 검색하여 새로운 결과 테이블에 저장하는 명령어로 WHERE 다음에 조건이 온다.
SELECT 회원 WHERE PT횟수 < 5
GIVING Answer
PROJECT: 선택된 일부의 column들만 새로운 결과 테이블에 포함하는 명령어로 OVER 다음에 선택된 column의 리스트가 따라옴
PROJECT 회원 OVER (회원 번호, 회원 이름, PT 횟수)
GIVING Answer
JOIN: 여러 개의 테이블에서 데이터 추출을 가능케 하는 명령어로 두 개의 테이블이 조인됨
JOIN 회원 트레이너
WHERE 회원.담당트레이너번호 = 트레이너.트레이너번호
GIVING Answer
UNION: 합집합으로 두 테이블이 같은 수의 column을 가지고 있고 해당 column들의 데이터 타입이 같을 때 UNION이 가능
INTERSECT: 교집합
SUBTRACT: 차집합
이렇게 관계대수에 테이블을 조작하기 위해 어떤 명령어가 있는지 설명했으니 예시 문제를 풀어보며 관계대수에 대해 이해해보자.
예시 문제)
회원 테이블에서 PT 횟수가 5회 미만인 회원의 회원 번호와 회원 이름과 해당 회원을 담당하는 트레이너의 이름을 새로운 결과 테이블 Answer에 저장해보여라.
SELECT 회원 WHERE PT횟수 < 5
GIVING Temp1
JOIN Temp1 트레이너
WHERE Temp1.담당트레이너번호 = 트레이너.트레이너번호
GIVING Temp2
PROJECT Temp2 OVER (회원 번호, 회원 이름, 트레이너 이름)
GIVING Answer
이렇게 Relational Database를 처리하는 이론적인 방법인 관계대수에 대해 알아보았다. 다음 글에서는 Relational Database를 조작하는 기준 언어인 SQL에 대해 알아보도록 하겠다.
'🖥️ Computer Science > Database (DB)' 카테고리의 다른 글
[DB] SQL에 대하여 (1) | 2023.11.28 |
---|---|
[DB] 데이터베이스(Database)란 무엇인가? - Entity, Attribute, Relationship (1) | 2023.11.26 |