관계형 대수로 MAX를 어떻게 찾을 수 있습니까?
데이터베이스로 작업하면서 관계형 대수를 사용하여 MAX를 어떻게 찾을 수 있습니까?
단일 속성 'a'가있는 관계 A가 있다고 가정합니다 (이에 대해 더 복잡한 관계를 줄이는 것은 관계형 대수학에서 간단한 작업입니다. 여기까지 도달했다고 확신합니다). 이제 최대 값을 찾고 싶습니다. A의 값.
이를 수행하는 한 가지 방법은 자신과 A의 외적을 찾는 것입니다. 'a'의 이름을 변경하여 새 관계가 고유 한 이름을 가진 속성을 갖도록하십시오. 예를 들면 :
( 'a'를 'a1'로 이름 변경) X ( 'a'를 'a2'로 이름 변경)
이제 'a1'< 'a2'를 선택하면 결과 관계는 최대 값을 제외한 모든 값을 갖게됩니다. 최대 값을 얻으려면 원래 관계의 차이를 찾으십시오.
(A x A) - (select 'a1' < 'a2') ((rename 'a' as 'a1')(A) x (rename 'a' as 'a2')(A))
그런 다음 project
Tobi Lehman이 아래 설명에서 제안한대로 연산자를 사용하여 단일 열로 줄입니다.
관계형 대수 표기법으로 작성하면 (제 기억이 정확하다면) 될 것입니다. 최종 이름 바꾸기 (예 : ρ)는 원래 관계에서와 동일한 이름을 가진 속성으로 끝납니다.
ρ a / a1 (π a1 ((A x A)-σ a1 <a2 (ρ a1 / a (A) x ρ a2 / a (A))))
오늘이 문제를 직접 해결하려고했을 때 2 센트 만 남았습니다.
A = 1,2,3이라고 가정 해 보겠습니다.
사용하는 경우
A x A - (select 'a1' < 'a2') ((rename 'a' as 'a1')(A) x (rename 'a' as 'a2')(A))
1 | 1, 2 | 1,3 | 2,3 | 1,3 | 2,3 | 3과 같은 두 개의 열이 아니라 단일 최대 값을 얻지 못합니다.
3 개만 얻는 방법은
project(a)A - project(a1)((select 'a1' < 'a2') ((rename 'a' as 'a1')(A) x (rename 'a' as 'a2')(A)))
적어도 그것은 비슷한 상황에서해야 할 일입니다.
누군가에게 도움이되기를 바랍니다.
속성 A와 값 1,2,3과의 관계가 있다고 생각합시다.
A
1
2
3
그래서 지금 ..
프로젝트 A 값을 A1로 이름을 바꿉니다.
A1
1
2
3
다시 A 값을 프로젝트하고 A2로 이름을 바꿉니다.
A2
1
2
3
와이 가입 A2<A1
즉 \join_{A2<A1}
(A2 정수, A1 정수) : 출력 스키마 - 그래서를
A2<A1
1|2
1|3
2|3
우리가 join
좋아 하기 때문에 항상 A2 값은 A1보다 작을 것 입니다 ( a2<a1
)
이제 프로젝트 A2 출력은 다음과 같습니다.
A2
1
2
이제 원래 속성과 비교
A diff A2
A
1
2
3
diff
A2
1
2
출력은 3
최대 값입니다.
안녕하세요, 어떤 사람이 더 나은 모습을 위해 편집을 도와야한다는 것을 알고 있습니다
지금은 관계형 대수 구문의 대부분을 잊어 버렸습니다 . 쿼리는 사용하여 SELECT
, PROJECT
, MINUS
및 RENAME
것
SELECT v1.number
FROM values v1
MINUS
SELECT v1.number
FROM values v1 JOIN values v2 ON v2.number > v1.number
번역 할 수 있기를 바랍니다.
나는 이것이 오래되었다는 것을 알고 있지만 여기에 손으로 쓴 공식이 있습니다.
관계 A : 1,2,3,4
1. First we want to PROJECT and RENAME relation A
2. We then to a THETA JOIN with the test a1<a2
3. We then PROJECT the result of the relation to give us a single set of values
a1: 1,2,3 (not max value since a1<a2)
4. We then apply the difference operator with the original relation so:
1,2,3,4 --- 1,2,3 returns 4
4 is the Max value.
MAX 찾기 :
전략:
Find those
x
that are not theMAX
.- Rename
A
relation asd
so that we can compare eachA
x
with all others.
- Rename
Use
set difference
to find thoseA
x
that were not found in the earlier step.
Project x(A) - Project A.x
(Select A.x < d.x (A x Rename d(A)))
ReferenceURL : https://stackoverflow.com/questions/5493691/how-can-i-find-max-with-relational-algebra
'UFO ET IT' 카테고리의 다른 글
MD5와 같은 해시 함수는 어떻게 고유합니까? (0) | 2021.01.05 |
---|---|
Scala에서 더 나은 문자열 포맷팅 (0) | 2021.01.05 |
인터넷 연결 상태 변경에 대한 Android 이벤트 (0) | 2021.01.05 |
Linux에서 C의 디렉토리를 재귀 적으로 나열하는 방법은 무엇입니까? (0) | 2021.01.05 |
배열 변경시 $ watch가 트리거되지 않음 (0) | 2021.01.05 |