이 모듈은 데이터 유형을 구현합니다와이즈 토토라인 세그먼트 또는 부동 소수점 간격을 나타냅니다.와이즈 토토간격 엔드 포인트이므로 표현하는 데 특히 유용합니다 실험실 측정.
측정의 기하학은 일반적으로보다 복잡합니다 숫자 연속체의 한 지점. 측정은입니다 일반적으로 다소 퍼지 한계가있는 해당 연속체의 세그먼트. 측정은 불확실성으로 인해 간격으로 나옵니다 측정되는 값이 당연히 단백질의 안정성의 온도 범위.
상식 만 사용하면 저장하는 것이 더 편리합니다. 숫자 쌍보다는 간격과 같은 데이터. ~ 안에 연습, 심지어 대부분의 경우 더 효율적입니다 응용 프로그램.
상식의 선을 따라, 한계는 기존 숫자 데이터 유형의 사용을 제안합니다. 특정 정보 손실로 이어집니다. 이것을 고려하십시오 : 당신의 악기는 6.50을 읽고이 판독 값을 입력합니다. 데이터 베이스. 당신이 그것을 가져올 때 당신은 무엇을 얻습니까? 보다:
test = select 6.50 :: float8 as "ph"; ph --- 6.5 (1 행)
측정 세계에서 6.50은 6.5와 다릅니다. 때로는 비판적으로 다를 수 있습니다. 실험자 일반적으로 그들이 신뢰하는 숫자를 기록하고 게시합니다. 6.50입니다 실제로 더 크고 심지어는 퍼지 간격 퍼지어 간격은 6.5로 중심 지점이 있습니다 (아마도) 그들이 공유하는 유일한 공통 기능. 우리는 확실히합니다 그러한 다른 데이터 항목이 동일하게 나타나기를 원하지 않습니다.
결론? 할 수있는 특수 데이터 유형을 갖는 것이 좋습니다. 임의로 변수로 간격의 한계를 기록하십시오 정도. 각 데이터 요소가 녹음한다는 의미에서 변수 고유 한 정밀도.
확인 :
test = 선택 '6.25 .. 6.50':: 와이즈 토토 as "ph"; ph ------------ 6.25 .. 6.50 (1 행)
간격의 외부 표현은 사용하여 형성됩니다 범위 운영자가 결합 한 1 ~ 2 개의 부동 소수점 번호 (..또는...). 또는 중심점 플러스 또는 편차를 빼고. 선택적 확실성 지표 (<, and~)도 저장할 수 있습니다. (확실성 모든 내장 운영자가 표시기를 무시합니다. 하지만.)
in표 F-29, x, y및델타부동 소수점 번호 표시.xandy하지만델타, 확실성이있을 수 있습니다 지시자.
표 F-29.와이즈 토토외부 표현
x | 단일 값 (제로 길이 간격) |
x .. y | 간격xtoy |
x(+-)델타 | 간격x - 델타tox+델타 |
x .. | 하한이있는 개방 간격x |
.. x | 상한이있는 개방 간격x |
표 F-30. 유효한 예와이즈 토토입력
5.0 | 제로 길이 세그먼트를 만듭니다 (포인트 할 것이다) |
~ 5.0 | 제로 길이 세그먼트 및 레코드 생성~데이터에서.~에 의해 무시됩니다와이즈 토토운영이지만 a로 보존됩니다 논평. |
<5.0 | 5.0에 포인트를 만듭니다.<무시되지만 a로 보존됩니다 논평. |
5.0 | 5.0에서 지점을 만듭니다.무시되지만 a로 보존됩니다 논평. |
5 (+-) 0.3 | 간격을 만듭니다4.7 .. 5.3.(+-)표기법은 보존되지 않습니다. |
50 .. | 50보다 큰 모든 것 |
.. 0 | 0 이하의 모든 것 |
1.5E-2 .. 2E-2 | 간격을 만듭니다0.015 .. 0.02 |
1 ... 2 | 동일1...2또는1 .. 2또는1..2(범위 연산자 주변의 공간 무시됩니다) |
왜냐하면...는 데이터에 널리 사용됩니다 출처, 그것은의 대체 철자로 허용됩니다.... 불행히도 이것은 구문 분석을 만듭니다 모호성 : 상한이의 여부는 확실하지 않습니다.0...2323또는0.23. 이것은 소수점 전에 최소한 하나의 숫자를 요구하여 해결 의 모든 숫자를 가리 킵니다.와이즈 토토입력.
정신 점검으로와이즈 토토거부 하한이 상단보다 큰 간격, 예5 .. 2.
와이즈 토토값은 내부적으로 저장됩니다 32 비트 플로팅 포인트 번호 쌍. 이것은 그 숫자를 의미합니다 7 개 이상의 중요한 숫자는 잘릴 것입니다.
7 이하의 숫자가 적은 숫자가 유지됩니다 원래 정밀도. 즉, 쿼리가 0.00을 반환하는 경우, 귀하는 귀하입니다 후행 제로가 유물이 아님을 확신 할 것입니다 형식 : 원래 데이터의 정밀도를 반영합니다. 주요 0의 수는 정밀도에 영향을 미치지 않습니다. 값 0.0067은 단지 2 가지 중요한 것으로 간주됩니다 숫자.
the와이즈 토토모듈에는 요점이 포함되어 있습니다 에 대한 색인 연산자 클래스와이즈 토토값. 그만큼 Gist Opclass에서 지원하는 운영자는 다음과 같습니다.
[a, b] << [c, d]가 남아 있습니다
[a, b]는 전적으로 [c, d]의 왼쪽에 있습니다. 즉, [a, b] << [c, d]는 b <c이고 false 인 경우 사실입니다. 그렇지 않으면
[a, b] [c, d]는
[a, b]는 전적으로 [c, d]의 오른쪽에 있습니다. 즉, [a, b] [c, d]는 a d와 false 인 경우 참입니다. 그렇지 않으면
[a, b] & <[c, d] 겹치거나 왼쪽
이것은 더 잘 읽을 수 있습니다" "의 오른쪽으로 확장되지 않음. b <=가 될 때는 사실입니다 디.
[a, b] & [c, d] 겹치거나 오른쪽
이것은 더 잘 읽을 수 있습니다" "의 왼쪽으로 확장되지 않음. a =에 맞으면 마찬가지입니다 기음.
[a, b] = [c, d] 동일
세그먼트 [A, B] 및 [C, D]는 동일합니다. = C 및 B = D
[a, b] && [c, d] 겹침
세그먼트 [A, B] 및 [C, D] 중첩.
[a, b] @ [c, d] contains
세그먼트 [a, b]에는 세그먼트 [c, d]가 포함되어 있습니다. a <= c 및 b = d
[a, b] <@ [c, d] 포함
세그먼트 [A, B]는 [C, D]에 포함되어 있습니다. = c 및 b <= d
(Postgresql 8.2 이전, 격리 연산자 @ 및 < @는 각각 @와 ~라고 불 렸습니다. 이 이름은 여전히 있습니다 사용 가능하지만 감가 상각되며 결국 은퇴 할 것입니다. 이전 이름은 컨벤션에서 반전됩니다. 이전에는 핵심 기하학적 데이터 유형이 이어졌습니다!)
표준 B- 트리 연산자도 제공됩니다 예
[a, b] <[c, d]보다 작습니다 [A, B] [C, D]보다
이 사업자들은 실용적으로 많은 의미가 없습니다. 목적이지만 정렬. 이 연산자들은 먼저 (a)와 (c), 그리고 이것들이 같으면 (b)와 (d)를 비교하십시오. 그 결과 대부분의 경우 합리적으로 좋은 정렬, 이는 유용합니다. 이 유형으로 주문을 원합니다.
사용의 예는 회귀 테스트를 참조하십시오SQL/와이즈 토토.SQL.
변환하는 메커니즘(+-)to 일반 범위는 결정에 완전히 정확하지 않습니다 경계에 대한 중요한 숫자 수. 예를 들어, 결과적으로 하한에 추가 숫자를 추가합니다. 간격에는 10의 힘이 포함됩니다 :
postgres = select '10 (+-) 1 ':: seg as seg; 세그 ------- 9.0 .. 11-해야 할 것 : 9 .. 11
R- 트리 지수의 성능은 크게 의존 할 수 있습니다. 입력 값의 초기 순서. 정렬하는 것이 매우 도움이 될 수 있습니다 의 입력 테이블와이즈 토토열; 보다 스크립트Sort-와이즈 토토ments.pl예.
원래 저자 : Gene Selkov, Jr.<selkovjr@mcs.anl.gov
,
Argonne National의 수학 및 컴퓨터 과학 부서
실혐실.
주로 Joe Hellerstein 교수에게 감사드립니다 (http : //db.cs.berkeley.edu/jmh/) 설명을위한 요지의 요지 (http : //gist.cs.berkeley.edu/). 나도 해요 현재와 과거에 모든 Postgres 개발자에게 감사합니다 내 자신의 세상을 만들고 방해받지 않은 살 수 있습니다. 그것. Argonne Lab에 대한 감사를 인정하고 싶습니다. 그리고 수년간의 충실한 미국 에너지 부에 내 데이터베이스 연구 지원.