관계형 데이터베이스 실전 입문 - 02. 술어논리와 관계형 모델

2.1 술어논리와 관계형 모델

명제

어떤 사물에 관해 설명한 문장이 그 의미가 정확한지, 즉 참인지 거짓인지 물을 수 있는 것.

명제가 아닌것

  • 명령, 기분
  • 좋다, 싫다, 예쁘다. → 주관적이며 끊임없이 변하기 쉬운 것

명제논리

어떤 명제의 참과 거짓을 알고 있을 때 다른 명제의 참과 거짓이 무엇인지 알아내는 데 특화된 학문.

명제를 P나 Q등의 기호로 표현한다.

(논리) 연결자

  • ¬ (부정, NOT)
  • ∧ ( 연언, 논리곱, AND)
  • ∨ (선언, 논리합, OR)
  • ⊃ (포함, IMP)
  • ≡ (동치, EQ)
  • | (부정논리곱, NAND)
  • ↓ (부정논리합, NOR)
  • ⊕ (베타적논리합, XOR)

진리함수의 진리합1

P Q ¬P P∧Q P∨Q
T T F T T
T F F F T
F T T F T
F F T F F

진리함수의 진리합2

P⊃Q P≡Q P | Q P↓Q P⊕Q
T T F F F
F F T F T
T F T F T
T T T T F

T: True || F: False

양화논리

집단을 대상으로 참과 거짓을 묻는 것.

  • 어떤 집단의 요소 전체가 어떠한 성질을 충족하는가? → 범용정량 (∀)
  • 어떤 집단의 요소는 어떠한 성질을 충족하는 것이 존재하는가? → 존재정량 (∃)

집합과 요소의 포함 관계 차이

  • ∈: 어떠한 원소가 집합에 포함된다. (인도코끼리 ∈ 코끼리)
  • ⊆: 집합 사이의 포함 관계를 나타 낸다. (코끼리종 ⊆ 초식동물)

2.2 릴레이션의 연산과 술어논리

제한(Restrict)

제한은 SELECT 문의 WHERE 절에 해당하는 작업이다.

제한은 대상 릴레이션에 관해 새로운 술어를 적용하는 작업이다.

P(t): 릴레이션 R에 관한 술어 || Q(t): 제한을 표현한 술어

P(t) ∧ Q(t)

곱집합(Product)

예를 들어 속성이 각각 한 개씩밖에 없는 릴레이션 두 개의 곱집합.

R1, R2에서 곱집합하여 새로운 릴레이션 R3를 도출하는 형태

R1과 R2 2개의 전제가 되는 사실로부터 어떻게 새로운 사실을 도출할 지 → 곱집합

P(t1) ∧ Q(t2)

결합(Join)

곱집합과의 차이점은 두 개의 릴레이션에 공통 속성이 존재하는지 여부다. 결합은 일반적으로 두 개의 릴레이션 사이에 공통된 속성이 존재한다.

# z는 자유변수로 어느 쪽 명제에도 z는 같은 의미를 나타낸다.
# P, Q 양쪽의 술어에 관해서도 z의 값은 같아야 한다.
P(x, z) ∧ Q(y, z)

F(x, y, z)

공통된 특성이 같은 특성값을 갖는 튜플끼리만 결합할 수 있다.

교집합(Intersect)

교집합도 결합의 특수한 경우라고 생각할 수 있다. 곱집합은 공통된 특성이 존재하지 않는 릴레이션 사이의 결합이지만 교집합은 반대로 모든 속성이 공통인 릴레이션 사이의 결합이라고 할 수 있다.

P(t) ∧ Q(t)

모든 속성이 공통이므로 튜플을 구별해 표현할 필요는 없다.

합집합(Union)

모든 특성이 공통인 릴레이션 사이의 연산이다.

P(t) ∨ Q(t)

두 가지의 릴레이션이 모두 포함되어 있는 튜플의 집합이 합집합의 연산 결과가 된다.

차집합(Difference)

한쪽의 릴레이션에는 포함돼 있지만 다른 쪽의 릴레이션에는 포함되지 않은 튜플의 집합을 반환하는 연산이다. 차집합도 합집합과 마찬가지로 릴레이션의 특성은 모두 공통이어야 한다.

P(t) ∧¬ Q(t)

차집합은 MINUS 또는 NOT EXISTS 로 DBMS에서 지원한다.

프로젝션(Projection)

프로젝션은 여러 개의 특성이 있는 릴레이션에서 특정 속성만 남기는 작업이다. 프로젝션을 적용한 다음의 릴레이션에 원래 릴레이션의 후보키가 남아 있다면 요소의 수가 줄어들지 않지만, 후보키에 포함된 속성의 전체 또는 일부가 포함되지 않을 때는 튜플의 값이 중복되므로 튜플의 수가 줄어들 수도 있다.

R1: P(x, y) -> R2: P'(y)

속성명 변경(Rename)

기존의 속성명을 변경하는 것뿐이라면 논리식의 구조에는 변화가 없으므로 의미가 없다.

확장(Extend)

기존의 속성에 어떤 연산을 한 결과를 새로운 속성으로 추가하는 작업이다.

확장으로 추가된 속성과 원래의 튜플 사이에는 노리적인 관계가 없다. 논리 연산이 아닌 어떤 법칙으로 새로운 사실을 도출하는 것이 확장이 가진 의미다.

외부결합에 관해서(Outer Join)

외부결합은 결과에 NULL이 포함되므로 아무렇게나 사용해서는 안된다. 관계형 모델의 관점에서 보면 외부결합은 없다. 오히려 합집합(Union)이라고 생각하면 이해하기 쉽다.

사실상 a쿼리와 b쿼리는 의미가 같다.

# a
SELECT t1.x, t2.y FROM t1 LEFT JOIN t2 ON t1.z = t2.z;

# b
SELECT t1.x, t2.y FROM t1 INNER JOIN t2 ON t1.z = t2.z
UNOIN
SELECT t1.x, NULL FROM t1 WHERE t1.z NOT IN (SELECT z FROM t2)

외부결합은 기본이 아니므로 다른 연산으로 대체할 수 있다.

요약

쿼리를 작성할 때의 목표는 어떤 집합에서 새로운 집합을 도출하기 위한 법칙을 기술하는 것.

릴레이션에 관한 어떤 연산을 실행한 결과는 릴레이션이 된다. 이것이 클로저라는 성질이다.

술어를 조합해 조금 더 복잡한 술어를 표현하는 것 → 관계형 모델에서의 쿼리의 목표라고 할 수 있다.


Written by@Sunny Son
개발자는 오늘도 뚠뚠

GitHubFacebook