2012-08-24 3 views
1

표현이 어떻게 다른지 혼란 스러워요. 프로젝트 A (r - s)와 프로젝트 A (r) - 프로젝트 A (R)가 RDBMS에 있습니다. 누구든지 위에 증명할 수있는 예를 보여줄 수 있습니까?RA 연산자 차이 - 관계 대수

답변

2
s = [x y] 
    0 0 
    1 1 
    2 2 

r = [x y] 
    0 0 
    0 1 
    0 2 
    1 1 
    1 2 
    2 2 

A = {y} 

PROJECT A(r − s)=[y] 
      1 
      2 

PROJECT A(r) − PROJECT A(s)=[y] 

다음은 이와 같은 예제를 생성하는 방법입니다. 비어 "v" (일반화 돌기)를 제외한 모든 조작은 D & D 대수 A. 출신

a <AND> TABLE_DUM = a & r <AND> TABLE_DUM =s <AND> TABLE_DUM 
-> 
a v (r <AND> <NOT> s) = (a v r) <AND> <NOT> (a v s). 

처음 두 의미 조건이 필요한 관계 a 및 관계 rs 다음 OP 문제 QBQL 명제로 변환 동일한 헤더를 가짐. 그것은 출력이 합법적 인 대답이지만

s = [p] 
    0 
; 
r = [p] 
    1 
; 
a = [r] 
; 
*** False Assertion *** 

가, 일부는 헤더에 속하지 않는 속성에 관계를 투사의 아이디어에 불편 느낄 수 있습니다. ar 헤더가 겹치기 위해 하나 더 조건을 추가해야합니다 : (a v s) <AND> TABLE_DUM != TABLE_DUM. 그런 다음 속성 {p, r}을 수동으로 OP의 {x, y}로 변환해야합니다. (Erwin에서 발견 된 버그가 소개 된 곳입니다.)

+0

제공 한 샘플 값을 사용하면 모든 결과가 비어 있어야합니다. 관계 차이를 나타내는 '-'의 의미를 오해하지 않는 한 MINUS라고합니다. –

+0

정말로 감사합니다. –

2

r = { TUPLE {X 1 , Y 1} }
s = { TUPLE {X 1 , Y 2} }

r MINUS s = r = { TUPLE {X 1 , Y 1} }

Take projections over X (A = {X} ???)

r PROJECT {X} === { TUPLE {X 1} }
s PROJECT {X} === { TUPLE {X 1} }

(r PROJECT {X}) MINUS (s PROJECT {X}) === { }
(r MINUS s) PROJECT {X} === { TUPLE {X 1} }

이의의 Y 2 부분입니다. 그것이 r과 s의 튜플 사이의 차이입니다. 당신이 "그 차이를 멀리 투사"한다면, 그 후에 남아있는 것이 무엇이든 동일하고, 평등 한 것의 차이를 계산하는 것은 당연한 일입니다.

처음 차이를 계산하면 s의 튜플에있는 Y 2 부분이 결과에서 버려지지 않도록 r (sloppily speaking)의 튜플을 생성 한 다음 해당 결과에 대한 투영을 생성합니다 그 자체로 비어 있지 않은 무언가.