'차이'연산이 이미 '조인'을 포함하는 쿼리 언어에 표현성을 추가합니까?


19

차분 연산자 (예 : EXCEPT일부 SQL 변형)는 관계 대수의 많은 기본 연산자 중 하나입니다. 그러나 차이 설정 연산자를 직접 지원하지 않지만 지원하는 LEFT JOIN(일종의 외부 조인) 데이터베이스가 있으며 실제로는 차이 설정 작업 대신 동일한 효과를 얻기 위해 사용할 수 있습니다.

이는 LEFT JOIN연산자가 유지 되는 한, 차이 설정 연산자 없이도 쿼리 언어의 표현력이 동일하다는 것을 의미합니까 ? 이 사실을 어떻게 증명할 수 있습니까?


1
이들이 동일한 표현력을 가짐을 나타 내기 위해 왼쪽 조인 작업 (및 RA의 다른 작업)으로 차이 연산을 구성 할 수 있음을 보여줍니다.
sxd

답변:


14

관계형 대수에서는 먼저 왼쪽 (외부) 조인에 대한 비공식적 인 정의를 제공하고 이름 바꾸기, 선택, 조인 및 프로젝션이 차이를 구성 할 수 있으며 차이, 선택 및 조합을 사용하여 구성 할 수 있음을 증명합니다. 왼쪽 (외부) 조인. 실제로, 우리는 그것을 역순으로 끝낼 것입니다 : 차이점을 사용하여 왼쪽 조인을 구성하는 방법을 보여준 다음 왼쪽 조인을 사용하여 차이를 구성하는 방법을 보여줄 것입니다.

S 가 각각 schemata ( R ' , T )( T , S ' )를 갖도록 하자 . 여기서 R 'S ' 는 한 스키마의 속성 집합이지만 다른 스키마는 아니지만 T 는 공통 속성 집합입니다.RS(R,T)(T,S)RST

보자 스키마에 대한 널 튜플 수 S ' . 즉, S '의 각 속성에 대한 모든 null 값으로 구성된 튜플 입니다. 그런 다음 왼쪽 외부 조인을 다음과 같이 정의합니다. 스키마 ( R ' , T , S ' )에 속하는 모든 튜플 ( r , t , s ) 의 집합입니다 .w=(ϵ,ϵ,...,ϵ)SSR LEFT JOIN S(r,t,s)(R,T,S)

  1. R 의 튜플 이고 ;(r,t)R
  2. (a) S 의 튜플 또는 (b) s = w 이며;(t,s)Ss=w
  3. 하면 에 대한 설정에 S w 이어서, ( R은 , t는 , w ) 세트에 있지.(r,t,s)sw(r,t,w)

예 : 의 스키마는 ( 1 , 2 , 3 ) , S 의 스키마가 ' ( 2 , 3 , 4 ) , 우리는이 R을 = { ( 1 , 2 , 3 ) , ( 4 , 5 , 6 ) }S = { ( 2 , 3 , 4 )R(A1,A2,A3)S(A2,A3,A4)R={(1,2,3),(4,5,6)} . (1)과 (2)를 통해 중간 결과 { ( 1 , 2 , 3 , 4 ) , ( 1 , 2 , 3 , 6 ) , ( 1 , 2 , 3 , ϵ ) , ( 4 , 5 , 6) , ϵ ) } . (3)에 의해 우리는 ( 1 , 2S={(2,3,4),(2,3,6)}{(1,2,3,4),(1,2,3,6),(1,2,3,ϵ),(4,5,6,ϵ)}예를 들어 ( 1 , 2 , 3 , 4 ) s = 4 ϵ = w 가 있으므로 , 3 , ϵ ) . 따라서 { ( 1 , 2 , 3 , 4 ) , ( 1 , 2 , 3 , 6 ) , ( 4 , 5 , 6 , ϵ ) }(1,2,3,ϵ)(1,2,3,4)s=4ϵ=w{(1,2,3,4),(1,2,3,6),(4,5,6,ϵ)}왼쪽 조인의 예상 결과입니다.

정리 : R LEFT JOIN S와 같습니다 (R EQUIJOIN S) UNION ((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w).

증명 : (R EQUIJOIN S)(1) 및 (2a)에 필요한 모든 것을 제공합니다. 우리는 (2b)와 (3)에서 요구하는 ((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)모든 형태 를 제공 한다고 주장합니다 (r, t, w).

이를 확인하려면 먼저 S에 해당 튜플이없는 R(((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) 의 모든 튜플 세트입니다 . 그것을 확인하려면, 그것은 일반적인 투사하는 것은 밖으로 속성에 의해주의에 충분 RS (속성 세트 T )과의 차이를 고려하여 하나 (스키마 모든 및 만 튜플로 남아 T 로 표시됩니다) R 하지만, S가 아닙니다 . 에 의해 와 R , 우리는 모든과 만 튜플 복구 R 의 속성 값이 T 에 존재하는 R 아니라에서 S를RSRSTTRSEQUIJOINRRTRS; 즉, 지금까지 우리가 주장한 튜플 세트입니다.

다음으로의 스키마는 R 의 스키마 (((PROJECT_T R) DIFFERENCE (PROJECT_T S))와 동일하며 (즉, ( R ' , T ) ) w 의 스키마 는 S ' 입니다. 동작 우리는 폼의 모든 터플을 얻기 때문에 카티 제품 ( R , t , w ) 가 전혀없는 곳에 ( t , s의 )S 에 해당하는 ( R , t )R .R(R,T)wSJOIN(r,t,w)(t,s)S(r,t)R

이것은 우리가에 추가 할 필요 튜플의 집합 정확하게 것을보고 R EQUIJOIN S구조에 위해가 R LEFT JOIN S, 다음 사항을 고려하십시오 건설에 의해, (3)을 만족하기 때문에, R EQUIJOIN S포함 할 수 없습니다 경우 포함 ( R , t를 , w ) (그렇다면 두 번째 부분을 포함하는 ( r , t , w ) 는 모순이 될 것입니다); 우리가 또 다른 추가한다면 ( R , t를 , ) 하지에 , 다음이 될 것이다 ((r,t,s)((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)(r,t,w)(r,t,w)(r,t,w)((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w) S 에 해당하는 ( R , t ) 에서의 R 과의 정의에 의해, ( R은 , t는 , s의 ) 도있을 것이다) (3 모순. 이것으로 증명이 완료됩니다.(t,s)S(r,t)REQUIJOIN(r,t,s)R LEFT JOIN S

이제 왼쪽 조인을 사용하여 차이를 구성 할 수 있음을 보여줍니다.

정리 : R DIFFERENCE S에 해당PROJECT_T(SELECT_{t'=w}(R LEFT JOIN (SELECT_{s=s'}(((S JOIN RENAME_{T->T'}(S)))))))

증명 : 여기서 모든 속성이 의미를 공유하기 때문에 S ' 는 비어 있습니다. 첫째, 우리의 새로운 관계를 생성 S를 내의 속성 세트 복제하여 S를 (처리 와 는 튜플 구성되도록) ( t , t ' ) 속성 집합 ( T , T ' ) t = t ' (취급 ). 왼쪽 조인은 ( t , t ' ) 형식의 튜플을 남깁니다.RSDIFFERENCESSRENAMEJOIN(t,t)(T,T)t=tSELECT(t,t)여기서 또는 t ' = w 입니다. 이제 S 에도 나타나는 항목을 제거 하려면 가장 바깥 쪽에서 처리되는 ( t , w ) 형식의 튜플 만 유지해야합니다 . 마지막 은 임시 속성 세트 T '를 제거 하고 원래 스키마와의 차이점을 남겨 둡니다.t=tt=wS(t,w)SELECTPROJECTT

예 : S = { ( 3 , 4 ) , ( 5 , 6 ) , ( 7 , 8 ) }이라고 하자 . 먼저 d 속성이 T '인 S' 를 얻습니다 : { ( 3 , 4 )R={(1,2),(3,4),(5,6)}S={(3,4),(5,6),(7,8)}SRENAMET . 이작업은 9 개의 가능한 페어링을 모두 갖춘 데카르트 제품을 제공합니다. 이 세트는 형식상의 이유로 여기에 작성되지 않았습니다. 그런다음 이것을 { ( 3 , 4 , 3 , 4 ) , ( 5 , 6 , 5 , 6 ) , ( 7 , 8 , 7 , 8 ) }로 구문 분석 합니다. 와{(3,4),(5,6),(7,8)}JOINSELECT{(3,4,3,4),(5,6,5,6),(7,8,7,8)}LEFT JOIN { ( 1 , 2 , ϵ , ϵ ) , ( 3 , 4 , 3 , 4 ) , ( 5 , 6 , 5 , 6 ) }을 제공 합니다. (가)제공 { ( 1 , 2 , ε , ε ) } . 가제공 { ( 1 , 2 ) } 원하는 답.R{(1,2,ϵ,ϵ),(3,4,3,4),(5,6,5,6)}SELECT{(1,2,ϵ,ϵ)}PROJECT{(1,2)}


LaTeX 구문을 사용하려면 게시물을 편집하십시오. 모든 수식을 $ 기호 로 묶어 시작합니다 (예 : $ (1,2) $ ). select와 같은 키워드는`에 넣어야합니다 (예 :`SELECT`가됩니다 ). (1,2)SELECT
Raphael

@Raphael LaTeX를 사용해야한다는 점을 지적 해 주셔서 감사합니다. LaTeX에서 수학을 배우고 코드를 역행하는 것에 대해 선의의 시도를했습니다. 다른 조치가 필요하면 알려주십시오. 다시 감사합니다!
Patrick87

감사합니다! 들여 쓰기 된 (인라인이 아닌) 수학 조각을 만들 려면 $ $ ... $ $ 를 고려할 수 있습니다 . 올바르게 사용하면 가독성이 향상 될 수 있습니다. MathJax는 또한 숫자 방정식을 지원하지만 어떻게 해야할지 모르겠습니다.
Raphael

나는 당신의 논리가 잘못되었다고 생각합니다. DIFFERENCE을 정의 하는 데 사용 LEFT JOIN하고 있으며이를 사용 LEFT JOIN하여 DIFFERENCESQL이 SQL 없이도 수행 할 수 있다는 결론을 내립니다. 이것이 유효하기 위해서는을 제외한LEFT JOIN 연산자로 표현한 다음 그 와 동등한 것을 증명해야 합니다. DIFFERENCEDIFFERENCE
Janoma

@Janoma 나는 그것이 필요하다고 생각하지 않습니다 ... 우리는 차이가 왼쪽 조인으로 표현 될 수 있음을 보여 주려고 노력하고 있습니다. 당신이 말하는 것이 장점이 있다면, LEFT JOIN이 "기본"또는 "필수"연산이라고 주장 할 수 있고 LEFT JOIN이 아닌 다른 연산자의 관점에서 DIFFERENCE를 정의하도록 요구할 수 있습니다. 나는 각각이 서로를 시뮬레이트 할 수 있다는 것을 보여 주었으므로, 다른 것보다 다소 "기본적"인 것도 아닙니다. 소품에서. 논리, NOT 및 AND는 OR 및 NOT과 같이 완전합니다. 세 가지 모두 필요하지 않습니다.
Patrick87

-1

SQL에 의해 구현 된 LEFT JOIN은 결과로 관계를 생성하지 않습니다 (결과의 일부 속성에 값이 없기 때문에).

SQL로 구현 된 LEFT JOIN 인 Ergo는 관계형 대수 연산자의 직접적인 대응 요소가 아닙니다.

Ergo, 관계 차이 연산자는 LEFT JOIN으로 표현할 수 없습니다 (LEFT JOIN은 관계 대수의 일부일 수 없기 때문에 LEFT JOIN은 관계가 아닌 것을 생성하므로 대수의 닫힘을 위반하기 때문입니다).

내가 아는 클로저만족시키는 관계형 대수 의 기본 연산자 집합 에는 항상 관계형 차이 또는 관계형 반차가 포함됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.