2013-02-09 3 views
0

나는 song_id, song_name, album_id 속성 및 album_id 및 album_name이 포함 된 두 개의 관계가있는 문제가 있습니다. 노래 관계에 노래가없는 모든 앨범의 이름을 찾아야합니다. 문제는 Rename, Projection, Selection, Grouping (합, 최소, 최대, 개수), Cartesian Product 및 Natural join 만 사용할 수 있다는 것입니다. 나는이 작업을 위해 많은 시간을 보냈으며 올바른 방향으로 나를 지적한 도움을 주시면 감사하겠습니다.관계형 대수 쿼리 문제

답변

1

@ErwinSmout에서 지적했듯이 차이점은 일반적으로 차이점이 있습니다. 그러나 사용할 수 없기 때문에 카운트를 사용하는 까다로운 해결 방법이 있습니다. 노래 관계에있는 album_id도 모두 albums 관계에 있다고 생각하고 있습니다.

PROJECT album_id와 노래 관계 (관계형 대수의 PROJECT은 SQL의 SELECT DISTINCT과 같습니다). 나는이 관계를 song_albums이라고 부를 것입니다. 이제 albums 관계의 수를 가져 와서이 m을 호출하고 새 테이블의 수를 가져 와서 이것을 n이라고 부릅니다.

앨범 관계와 song_albums 관계의 데카르트 곱을 취하십시오. 이 새로운 릴레이션에는 m * n 개의 행이 있습니다. 이제 카운트를 album_name으로 그룹화하면 m album_name 각각의 카운트가 n이됩니다. 별로 도움이되지 않습니다.

그러나 지금은 albums.album_id != song_albums.album_id 인 관계 행에서 SELECT입니다. 이제 album_name으로 그룹화 한 수를 계산하면 원래 songs 관계가 아닌 앨범의 수는 n이되고 원래 있던 수는 n보다 작습니다. 행이 삭제 될 수 있으므로 그 앨범에 얼마나 많은 노래가 원래 songs 관계에 있었는지.


편집 : 것이 판명 된 바와 같이, 이것은 엄격 관계형 대수 솔루션이 아니다 : SQL, 이러한 n 함유 한 같은 1 × 1 테이블, 간단히 취급 할 수있다 정수이며 동등 비교에 사용됩니다. 그러나 위키 백과에 따르면 selection은 관계의 두 속성 또는 속성과 상수 인 값을 비교해야합니다.

다른 권장 사항이 아닌 다른 직교 제품에 의해 처리 될 또 다른 장애물 : n을 포함한 1 x 1 릴레이션의 직교 좌표를 가장 최근의 관계로 사용할 수 있습니다. 이제 우리는 항상 n과 같은 속성을 갖기 때문에 적절한 관계 대수 선택을 할 수 있습니다.이 이후

여기에 위의 영어 설명 캡처 관계형 대수 표현, 다소 복잡한 얻었다 :

relational algebra 1

relational algebra 2

relational algebra 3

relational algebra 4

주를이 n은 1 x 1 관계입니다. ith "count"라는 속성

+1

와우. 혹시 "가장 변형 된 SQL 솔루션"콘테스트가 있다면 반드시 참여해야합니다. 그 동안 나는 "불가능한"것을 철회하고 학생들에게 이런 종류의 수업을 가르치고, 가장 높은 나무에 매달려 있어야하며, 적어도 평생토록 데이터베이스 교육에서 멀리 떨어져 있어야합니다. –

+0

n이 임의의 숫자이기 때문에 어떻게 관계형 대수학에서 마지막 부분을 할 것인가? –

+0

@CodeEnthusiast 더 많은 데카르트 제품을 제공합니다! 멋지게 잡으려고, 나는이 문제를 해결할 수있는 해결책을 편집했다. 나는 이것이 순수 학문적 훈련이되기를 바랍니다. – DPenner1

0

불가능합니다. 문제는 네가 사용하는 것이 허용되지 않는 관계적인 차이를 사용해서 만 epxressed 될 수있는 부정 및 관계형 대수를 포함합니다.

선생님이이 문제의 해결책으로 제시 한 것을보고 싶습니다.

+0

사실 "불가능"하지 않습니다. DPenner의 솔루션을 참조하십시오. –