목차
📌 관계대수는 관계형 데이터베이스에서 원하는 정보와 그 정보를 검색하기 위해서 어떻게 유도하는가를 기술하는 절차적인 언어이다.
📌 Select는 릴레이션에 존재하는 튜플 중에서 선택 조건을 만족하는 튜플의 부분집합을 구하여 새로운 릴레이션을 만드는 연산이다.
🔔 예) 𝜎 Avg ≥ 90 (성적) : <성적> 릴레이션에서 '평균'(AVG)이 90점 이상인 튜플들을 추출하시오.
<성적>
Name | Kor | Eng | Mat | tol | Avg |
사쿠라 | 100 | 90 | 100 | 290 | 96.6 |
김채원 | 80 | 80 | 100 | 260 | 86.6 |
허윤진 | 100 | 70 | 80 | 250 | 83.3 |
카즈하 | 90 | 100 | 90 | 280 | 93.3 |
김가람 | 85 | 95 | 90 | 270 | 90.0 |
추출
Name | Kor | Eng | Mat | Tol | Avg |
사쿠라 | 100 | 90 | 100 | 290 | 96.6 |
카즈하 | 90 | 100 | 90 | 280 | 93.3 |
김가람 | 85 | 95 | 90 | 270 | 90.0 |
📌 Project는 주어진 릴레이션에서 속성 리스트(Attribute List)에 제시된 속성 값만을 추출하여 새로운 릴레이션을 만드는 연산이다. 단 연산 결과에 중복이 발생하면 중복이 제거된다.
🔔 예) 𝜋 Name, Avg (성적) : <성적> 릴레이션에서 'Name'과 'Avg' 속성을 추출하시오.
<성적>
Name | Kor | Eng | Mat | tol | Avg |
사쿠라 | 100 | 90 | 100 | 290 | 96.6 |
김채원 | 80 | 80 | 100 | 260 | 86.6 |
허윤진 | 100 | 70 | 80 | 250 | 83.3 |
카즈하 | 90 | 100 | 90 | 280 | 93.3 |
김가람 | 85 | 95 | 90 | 270 | 90.0 |
추출
Name | Avg |
사쿠라 | 96.6 |
김채원 | 86.6 |
허윤진 | 83.3 |
카즈하 | 93.3 |
김가람 | 90.0 |
📌 Join은 공통 속성을 중심으로 두 개의 릴레이션을 하나로 합쳐서 새로운 릴레이션을 만드는 연산이다.
💡 Cartesian Product(교차곱)의 연산은 두 릴레이션에 존재하는 모든 튜플들을 대응시켜 새로운 릴레이션을 만드는 연산으로 연산의 결과 차수는 두 릴레이션의 차수를 합한 것과 같고 튜플은 두 릴레이션의 튜플 수를 곱한 것과 같다. 즉, Catesian Product의 결과는 두 릴레이션을 연결하여 나타낼 수 있는 모든 튜플들을 표현할 수 있으므로 여기 에서 필요한 튜플만 선별하는 Select 연산을 수행하면 Join 연산의 결과와 같아지는 것이다.
🔔 예) 성적 ⋈ No = No 학적부 : <성적> 릴레이션과 <학적부> 릴레이션을 'No' 속성을 기준으로 합치시오.
<성적>
No | Name | Kor | Eng | Mat | tol | Avg |
9801 | 사쿠라 | 100 | 90 | 100 | 290 | 96.6 |
9802 | 김채원 | 80 | 80 | 100 | 260 | 86.6 |
9803 | 허윤진 | 100 | 70 | 80 | 250 | 83.3 |
9804 | 카즈하 | 90 | 100 | 90 | 280 | 93.3 |
9805 | 김가람 | 85 | 95 | 90 | 270 | 90.0 |
<학적부>
No | Addr |
9801 | 망원동 |
9802 | 서교동 |
9803 | 성산동 |
9804 | 합정동 |
9805 | 공덕동 |
합침
성적.No | Name | Kor | Eng | Mat | tol | Avg | 학적부.No | Addr |
9801 | 사쿠라 | 100 | 90 | 100 | 290 | 96.6 | 9801 | 망원동 |
9802 | 김채원 | 80 | 80 | 100 | 260 | 86.6 | 9802 | 서교동 |
9803 | 허윤진 | 100 | 70 | 80 | 250 | 83.3 | 9803 | 성산동 |
9804 | 카즈하 | 90 | 100 | 90 | 280 | 93.3 | 9804 | 합정동 |
9805 | 김가람 | 85 | 95 | 90 | 270 | 90.0 | 9805 | 공덕동 |
💡 위 그림에서와 같이 Join 조건이 '=' 일 때 동일한 속성이 2번 나타나게 된다.
📌 Division은 X ⊃ Y인 두 개의 릴레이션 R(X)와 S(Y)가 있을 때, R의 속성이 S의 속성 값을 모두 가진 튜플에서 S가 가진 속성을 제외한 속성만을 구하는 연산이다.
<구입자>
번호 | 이름 | 구입품코드 |
1 | 김채원 | A |
1 | 김채원 | B |
2 | 허윤진 | A |
2 | 허윤진 | B |
2 | 허윤진 | C |
4 | 카즈하 | C |
<생산품1>
생산품코드 |
A |
B |
<생산품2>
이름 | 생산품코드 |
허윤진 | A |
허윤진 | B |
🔔 예) 구입자[구입품코드 ÷ 생산품코드] 생산품1의 결과는 다음과 같다.
번호 | 이름 |
1 | 김채원 |
2 | 허윤진 |
💡 설명 : <구입자> 릴레이션에서 '구입품코드' 속성을 제외하고 '번호'와 '이름'을 추출한다. 단, <생산품1> 릴레이션의 모든 튜플과 연관되어 있는 튜플만 추출한다.
🔔 예) 구입자[이름, 구입품코드 ÷ 이름, 생산품코드] 생산품2의 결과는 다음과 같다.
번호 |
2 |
💡 설명 : <구입자> 릴레이션에서 '이름', '구입품코드' 속성을 제외하고 번호만 추출한다. 단, <생산품2> 릴레이션의 모든 튜플과 연관되어 있는 튜플만 추출한다.
📌 일반 집합 연산자는 수학적 집합 이론에서 사용하는 연산자로서 릴레이션 연산에도 그대로 적용할 수 있다.
연산자 | 기능 및 수학적 표현 | 카디널리티 |
합집합 UNION ∪ |
- 두 릴레이션에 존재하는 튜플의 합집합을 구하되, 결과로 생성된 릴레이션에서 중복되는 튜플은 제거되는 연산이다. - R ∪ S = { t | t ∈ R ⋏ t ∈ S } 💡 t는 릴레이션 R 또는 S에 존재하는 튜플이다. |
- | R ∪ S | ≤ | R | + | S | - 합집합의 카디널리티는 두 릴레이션 카디널리티의 합보다 크지 않다. |
교집합 INTERSECTION ∩ |
- 두 릴레이션에 존재하는 튜플의 교집합을 구하는 연산이다. - R ∩ S = { t | t ∈ R ⋎ t ∈ } 💡 t는 릴레이션 R 또는 S에 존재하는 튜플이다. |
- | R ∩ S | ≤ MIN { | R |, | S | } - 교집합의 카디널리티는 두 릴레이션 중 카디널리티가 적은 릴레이션의 카디널리티 보다 크지 않다. |
차집합 DIFFERENCE - |
- 두 릴레이션에 존재하는 튜플의 차집합을 구하는 연산이다. - R - S = { t | t ∈ R ⋎ t ∉ S } 💡 t는 릴레이션 R 또는 S에 존재하는 튜플이다. |
- | R - S | ≤ | R | - 차집합의 카디널리티의 릴레이션 R의 카디널리티 보다 크지 않다. |
교차곱 CARTESIAN PRODUCT x |
- 두 릴레이션에 있는 튜플의 순서쌍을 구하는 연산이다. - R x S = {r, s | r ∈ R ⋏ s ∈ S } 💡 r은 R에 존재하는 튜플이고, s는 S에 존재하는 튜플이다. |
- | R x S | = | R | x | S | - 교차곱의 디그리는 두 릴레이션의 디그리를 더한 것과 같고, 카디널리티는 곱한 것과 같다. |
💡 합병 조건 ? 합병 조건은 합병하려는 두 릴레이션 간에 속성의 수가 같고 대응되는 속성별로 도메인이 같아야 한다. 즉, 릴레이션 R과 S가 합병이 가능하다면, 릴레이션 R의 1번째 속성과 릴레이션 S의 1번째 속성의 도메인이 서로 같아야 한다. 그러나 속성의 이름이 같아야 되는 것은 아니다.
💡 교차곱은 두 릴레이션의 차수(Degree, 속성의 수)는 더하고, 카디널리티(튜플의 수)는 곱하면 된다는 것을 꼭 기억하자.
<사원>
사번 | 이름 |
1 | 김채원 |
2 | 허윤진 |
<직원>
사번 | 이름 |
2 | 허윤진 |
3 | 카즈하 |
🔔 예) 𝜋이름(사원) ∪ 𝜋이름(직원) : <사원> 릴레이션과 <직원> 릴레이션에서 '이름'을 추출한 것의 합집합을 구한다.
이름 |
김채원 |
허윤진 |
카즈하 |
🔔 예) 𝜋이름(사원) ∩ 𝜋이름(직원) : <사원> 릴레이션과 <직원> 릴레이션에서 '이름'을 추출한 것의 교집합을 구한다.
이름 |
허윤진 |
🔔 예) 𝜋이름(사원) - 𝜋이름(직원) : <사원> 릴레이션과 <직원> 릴레이션에서 '이름'을 추출한 것의 차집합을 구한다.
이름 |
김채원 |
🔔 예) 𝜋이름(사원) x 𝜋이름(직원) : <사원> 릴레이션과 <직원> 릴레이션에서 '이름'을 추출한 것의 교차곱을 구한다.
사원, 이름 | 직원, 이름 |
김채원 | 허윤진 |
김채원 | 카즈하 |
허윤진 | 허윤진 |
허윤진 | 카즈하 |
📌 관계해석은 관계 데이터 모델의 제안자인 코드(E. F. Codd)가 수학의 Predicate Calculus(술어 해석)에 기반을 두고 관계 데이터베이스를 위해 제안했다.
기호 | 구성 요소 | 설명 |
∀ | 전칭 정량자 | 가능한 모든 튜플에 대하여(For All) |
∃ | 존재 전량자 | 하나로도 일치하는 튜플이 있음(There Exists) |
📌 [정보처리기사] 물리 데이터베이스 설계 - 사전 조사 분석/데이터베이스 저장 공간 설계 (2) | 2024.02.14 |
---|---|
📌 [정보처리기사] 논리 데이터베이스 설계 - 정규화(Normalization)/반정규화(Denormalization)/시스템 카탈로그 (2) | 2024.02.14 |
📌 [정보처리기사] 논리 데이터베이스 설계 - 관계형 데이터베이스의 제약 조건: 키(Key)/무결성 (0) | 2024.02.13 |
📌 [정보처리기사] 논리 데이터베이스 설계 - 관계형 데이터 모델/관계형 데이터베이스의 구조 (0) | 2024.02.13 |
📌 [정보처리기사] 논리 데이터베이스 설계 - 식별자(Identifier) / E-R(개체-관계) 모델 (0) | 2024.02.13 |