이 문서는 지원되지 않는 버전의 토토 사이트 순위 용입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다스포츠 토토 결과3_스포츠 토토 결과SL1검은 색버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

16.3. 보기 및 토토 사이트 순위 시스템

16.3.1. 에서의 뷰 구현토토 사이트 순위

views in토토 사이트 순위are 토토 사이트 순위 시스템을 사용하여 구현되었습니다. 사실 절대적으로 있습니다 a의 차이 없음

mytab에서 myview를 선택하여 mytab;

두 명령과 비교

테이블 작성 myview (mytab의 동일한 속성 목록);
myview to myview 대신 토토 사이트 순위 "_retmyview"를 작성하십시오.
    * mytab에서 * 선택;

이것이 바로 Create View 명령이하는 일이기 때문에 내부. 이것은 몇 가지 부작용이 있습니다. 그들 중 하나는 의 견해에 대한 정보토토 사이트 순위시스템 카탈로그는 정확히입니다 테이블과 동일합니다. 따라서 쿼리 파서에는 있습니다 테이블과보기 사이에는 전혀 차이가 없습니다. 그들은입니다 같은 것 - 관계. 그것은 중요한 것입니다 지금.

16.3.2. 어떻게 토토 사이트 순위 선택

SELECT의 토토 사이트 순위은 마지막 단계로 모든 쿼리에 적용됩니다. 주어진 명령이 삽입, 업데이트 또는 삭제이더라도. 그리고 그들은 다른 사람들과 다른 의미를 가지고 있습니다. 새 제품을 만드는 대신 구문 분석 트리를 제자리에 수정하십시오. 따라서 선택 토토 사이트 순위이 먼저 설명됩니다.

현재, ON SELECT에는 하나의 조치 만있을 수 있습니다. 규칙, 그리고 그것은 무조건 선택 행동이어야합니다. 대신에. 이 제한은 규칙을 안전하게 만드는 데 필요했습니다 일반 사용자를 위해 열 수있을 정도로 충분하고 규칙을 제한합니다. 실제보기 규칙 선택.

이 문서의 예제는 두 가지 조인 뷰입니다. 일부 계산 및이를 사용하는 더 많은 견해. 하나 두 가지 첫 뷰 중에서 토토 사이트 순위을 추가하여 나중에 사용자 정의됩니다. 최종 결과가되도록 작업을 삽입, 업데이트 및 삭제하십시오. 마법이있는 실제 테이블처럼 행동하는 견해가 될 것입니다. 기능. 시작하는 것은 그렇게 간단한 예가 아닙니다. 그리고 이것은 일을 어렵게 만듭니다. 그러나 더 낫습니다 단계별로 논의 된 모든 점을 다루는 예를 가지고 있습니다 섞일 수있는 많은 다른 것들을 갖기보다는 단계 명심.

예제를 사용하는 데 필요한 데이터베이스의 이름이 지정되었습니다al_bundy. 이것이 왜 이것이 왜 그런지 알게 될 것입니다 데이터베이스 이름. 그리고 그것은 절차 적 언어가 필요합니다pl/pgsql우리는 설치했습니다 작은 최소 () 기능이 필요합니다. 값. 우리는 그것을로 만듭니다.

함수 MIN (Integer, Integer) 생성 정수를 반환합니다.
    시작하다
        $ 1 <$ 2 인 경우
            $ 1의 반환;
        끝 IF;
        $ 2를 반환합니다.
    끝;
'언어 plpgsql;

처음 두 규칙 시스템에서 필요한 실제 테이블 설명은 다음과 같습니다.

테이블 SHOE_DATA 만들기 (
    Shoename char (10) - 기본 키
    SH_AVAIL INTEGER - 사용 가능한 #
    Slcolor char (10) - 선호 된 떼 색상
    Slminlen float, -Miminum Shoelace 길이
    Slmaxlen float, - 최대 떼 길이
    Slunit char (8) - 길이 단위
);

테이블 생성 shoelace_data (
    SL_Name char (10), - 기본 키
    SL_AVAIL INTEGER, - 사용 가능한 #
    SL_COLOR char (10), - 떼 색상
    SL_LEN FLOAT, - 신발성 길이
    SL_UNIT char (8) - 길이 단위
);

테이블 장치 생성 (
    un_name char (8) - 기본 키
    un_fact float- cm으로 변환하는 요소
);

나는 우리 대부분이 신발을 입는다 고 생각하며 이것이 정말 유용한 데이터. 글쎄, 세상에는 신발이 있습니다 신발 끈이 필요하지 않지만 Al의 삶이 더 쉬워지지는 않습니다. 그래서 우리는 그것을 무시합니다.

보기는로 생성됩니다.

보기 신발을 만듭니다
    sh.shoename 선택,
           sh.sh_avail,
           Sh.slcolor,
           Sh.slminlen,
           sh.slminlen * un.un_fact as slminlen_cm,
           sh.slmaxlen,
           sh.slmaxlen * slmaxlen_cm as as slmaxlen * un.un_fact,
           Sh.slunit
      Shoe_data Sh, Un
     여기서 sh.slunit = un.un_name;

Shoelace보기를 만듭니다
    s.sl_name 선택,
           s.sl_avail,
           s.sl_color,
           s.sl_len,
           s.sl_unit,
           s.sl_len * u.un_fact as sl_len_cm
      shoelace_data s, unit u
     여기서 s.sl_unit = u.un_name;

Shoe_ready를 View를 만듭니다
    rsh.shoename 선택,
           rsh.sh_avail,
           rsl.sl_name,
           rsl.sl_avail,
           Min (rsh.sh_avail, rsl.sl_avail)은 Total_avail입니다
      Shoe Rsh, Shoelace RSL에서
     여기서 rsl.sl_color = rsh.slcolor
       및 rsl.sl_len_cm = rsh.slminlen_cm
       및 rsl.sl_len_cm <= rsh.slmaxlen_cm;

Shoelace보기 (가장 간단한 것입니다 )) 관계 떼와 항목을 생성합니다pg_rewrite관계가있을 때마다 적용 해야하는 규칙을 다시 작성하십시오 Shoelace는 쿼리의 범위 테이블에 참조됩니다. 규칙에는 있습니다 규칙 자격이 없습니다 (나중에 비 선택적으로 논의 규칙은 현재 규칙을 가질 수 없으므로 대신에. 규칙 자격은 동일하지 않습니다 쿼리 자격! 규칙의 조치에는 쿼리가 있습니다 자격.

토토 사이트 순위의 조치는 하나의 쿼리 트리입니다. View Creation Command에서 명령문을 선택하십시오.

참고 :새로운 2 개의 추가 범위 테이블 항목 그리고 오래된 ( * New * 및 * Current *) 역사적 이유로 인쇄 된 쿼리 트리에서)에서 볼 수 있습니다.pg_rewrite입국은 관심이 없습니다 토토 사이트 순위 선택.

이제 우리는 포기Unit, Shoe_datashoelace_data및 Al 유형의 첫 번째 선택을 입력합니다 그의 삶 :

al_bundy = 단위 값에 삽입 ( 'cm', 1.0);
al_bundy = 단위 값에 삽입 ( 'm', 100.0);
al_bundy = 단위 값에 삽입 ( '인치', 2.54);
al_bundy = 
al_bundy = Shoe_Data 값에 삽입하십시오 
al_bundy- ( 'sh1', 2, 'black', 70.0, 90.0, 'cm');
al_bundy = Shoe_Data 값에 삽입하십시오 
al_bundy- ( 'sh2', 0, 'black', 30.0, 40.0, 'inch');
al_bundy = Shoe_Data 값에 삽입하십시오 
al_bundy- ( 'sh3', 4, 'brown', 50.0, 65.0, 'cm');
al_bundy = Shoe_Data 값에 삽입하십시오 
al_bundy- ( 'sh4', 3, 'brown', 40.0, 50.0, 'inch');
al_bundy = 
al_bundy = shoelace_data 값에 삽입하십시오 
al_bundy- ( 'sl1', 5, 'black', 80.0, 'cm');
al_bundy = shoelace_data 값에 삽입하십시오 
al_bundy- ( 'sl2', 6, 'black', 100.0, 'cm');
al_bundy = shoelace_data 값에 삽입하십시오 
al_bundy- ( 'sl3', 0, 'black', 35.0, 'inch');
al_bundy = shoelace_data 값에 삽입하십시오 
al_bundy- ( 'sl4', 8, 'black', 40.0, 'inch');
al_bundy = shoelace_data 값에 삽입하십시오 
al_bundy- ( 'sl5', 4, 'brown', 1.0, 'm');
al_bundy = shoelace_data 값에 삽입하십시오 
al_bundy- ( 'sl6', 0, 'brown', 0.9, 'm');
al_bundy = shoelace_data 값에 삽입하십시오 
al_bundy- ( 'sl7', 7, 'brown', 60, 'cm');
al_bundy = shoelace_data 값에 삽입하십시오 
al_bundy- ( 'sl8', 1, 'brown', 40, 'inch');
al_bundy = 
al_bundy = select *에서 shoelace;
sl_name | sl_avail | sl_color | sl_len | sl_unit | sl_len_cm
----------+--------+----------+-------+--------------
SL1 |       5 | 블랙 |    80 | cm |       80
SL2 |       6 | 블랙 |   100 | cm |      100
SL7 |       7 | 브라운 |    60 | cm |       60
SL3 |       0 | 블랙 |    35 | 인치 |     88.9
SL4 |       8 | 블랙 |    40 | 인치 |    101.6
SL8 |       1 | 브라운 |    40 | 인치 |    101.6
SL5 |       4 | 브라운 |     1 | m |      100
SL6 |       0 | 브라운 |   0.9 | m |       90
(8 줄)

우리의 견해에 대해 AL이 할 수있는 가장 간단한 선택이므로 우리는 이것은보기 토토 사이트 순위의 기본 사항을 설명하기 위해. 그만큼Select * From Shoelace구문 분석 및 구문 분석

shoelace.sl_name, shoelace.sl_avail 선택을 선택하십시오.
       shoelace.sl_color, shoelace.sl_len,
       shoelace.sl_unit, shoelace.sl_len_cm
  Shoelace Shoelace에서;

그리고 이것은 토토 사이트 순위 시스템에 제공됩니다. 토토 사이트 순위 시스템이 걷는다 범위 테이블을 통해에 토토 사이트 순위이 있는지 확인합니다.pg_rewrite모든 관계. 언제 범위 테이블 항목 처리Shoelace(지금까지 유일한 사람)는 그것을 찾습니다 토토 사이트 순위_retshoelace구문 분석 나무

S.SL_NAME, S.SL_AVAIL, SELECT SELECT
       s.sl_color, s.sl_len, s.sl_unit,
       sl_len_cm으로 float8mul (s.sl_len, u.un_fact)
  Shoelace *Old *, Shoelace *New *,
       shoelace_data s, 단위 u
 여기서 bpchareq (s.sl_unit, u.un_name);

파서가 계산을 변경했습니다 적절한 기능에 대한 호출 자격. 그러나 사실은 아무것도 바뀌지 않습니다.

보기를 확장하려면 다시 작성자는 단순히 subselect를 만듭니다. 규칙의 행동 구문 분석 트리를 포함하는 범위 테이블 항목 이 범위 테이블 항목을 원래 테이블 항목으로 대체합니다. 견해를 참조했습니다. 결과적으로 다시 작성된 구문 분석은 다음과 같습니다 Al이 입력 한 것처럼 거의

shoelace.sl_name, shoelace.sl_avail 선택을 선택하십시오.
       shoelace.sl_color, shoelace.sl_len,
       shoelace.sl_unit, shoelace.sl_len_cm
  From (select s.sl_name,
               s.sl_avail,
               s.sl_color,
               s.sl_len,
               s.sl_unit,
               s.sl_len * u.un_fact as sl_len_cm
          shoelace_data s, unit u
         여기서 s.sl_unit = u.un_name) shoelace;

하위 쿼리의 범위 테이블은 한 가지 차이가 있습니다 두 개의 추가 항목이 있습니다. 이것들 항목은 쿼리에 직접 참여하지 않습니다 하위 쿼리의 조인 트리 또는 대상 목록에서는 참조되지 않습니다. Rewriter는이를 사용하여 액세스 권한 점검을 저장합니다. 원래 범위 테이블 항목에있는 정보 견해를 참조했습니다. 이런 식으로 집행자는 여전히 확인합니다 사용자가보기에 액세스 할 수있는 적절한 권한이 있습니다. 다시 쓰기에서보기를 직접 사용하지는 않지만 질문.

첫 번째 규칙이 적용되었습니다. 규칙 시스템이 있습니다 상단에 나머지 범위 테이블 항목을 계속 확인하십시오 쿼리 (이 예에서는 더 이상 없음). 추가 된 내용의 범위 테이블 항목을 재귀 적으로 확인하십시오 참조 뷰가 있는지 확인하기 위해 하위 쿼리. (하지만 그렇지 않습니다 * old * 또는 * new * --- 확장하십시오. 그렇지 않으면 우리는 무한합니다 재귀!)이 예에서는 다시 쓰기 규칙이 없습니다. shoelace_data 또는 단위이므로 다시 쓰기가 완료되고 위의 플래너에게 주어진 최종 결과입니다.

이제 우리는 Blues Brothers의 문제에 직면합니다. 그의 가게에 나타나 새 신발을 사고 싶어 블루스 브라더스는 같은 신발을 신고 싶어합니다. 그리고 그것들 즉시 착용하고 싶어서 신발이 필요합니다.

al은 현재 상점에 어떤 신발을 알아야합니다 일치하는 신발 (색상 및 크기)과 총계가 있습니다. 정확히 일치하는 쌍의 수는 두 개 또는 동일합니다. 우리 그에게 무엇을 해야하는지 가르쳐주고 데이터베이스를 묻습니다.

al_bundy = SELECT *에서 SHOE_READY where total_avail = 2;
shoename | sh_avail | sl_name | sl_avail | Total_avail
----------+--------+----------+-------+----------
sh1 |       2 | SL1 |       5 |          2
sh3 |       4 | SL7 |       7 |          4
(2 줄)

al은 신발 전문가이므로 유형의 신발 만 알고 있습니다. Sh1은 맞습니다 (Shoelace SL7은 갈색이고 갈색이 필요한 신발입니다. 신발은 신발이 아닙니다. Blues Brothers가 입을 수있는 신발).

파서의 출력은 이번에는 구문 분석 트리입니다

SHOE_READY.SHOENAME, SHOE_READY.SH_AVAIL, SELECT SELECT SELECT
       shoe_ready.sl_name, shoe_ready.sl_avail,
       Shoe_ready.total_avail
  Shoe_ready Shoe_ready에서
 여기서 int4ge (shoe_ready.total_avail, 2);

첫 번째 토토 사이트 순위은에 대한 첫 번째 토토 사이트 순위입니다.Shoe_ready보기와 구문 분석이 발생합니다 나무

SHOE_READY.SHOENAME, SHOE_READY.SH_AVAIL,
       shoe_ready.sl_name, shoe_ready.sl_avail,
       Shoe_ready.total_avail
  From (select rsh.shoename,
               rsh.sh_avail,
               rsl.sl_name,
               rsl.sl_avail,
               Min (rsh.sh_avail, rsl.sl_avail)은 Total_avail입니다
          Shoe Rsh, Shoelace RSL에서
         여기서 rsl.sl_color = rsh.slcolor
           및 rsl.sl_len_cm = rsh.slminlen_cm
           및 rsl.sl_len_cm <= rsh.slmaxlen_cm) shoe_ready
 여기서 int4ge (shoe_ready.total_avail, 2);

마찬가지로에 대한 토토 사이트 순위신발Shoelace하위 쿼리의 범위 테이블, 3 단계 결승전으로 이어집니다. 쿼리 트리 :

SHOE_READY.SHOENAME, SHOE_READY.SH_AVAIL,
       shoe_ready.sl_name, shoe_ready.sl_avail,
       Shoe_ready.total_avail
  From (select rsh.shoename,
               rsh.sh_avail,
               rsl.sl_name,
               rsl.sl_avail,
               Min (rsh.sh_avail, rsl.sl_avail)은 Total_avail입니다
          에서 (select sh.shoename,
                       sh.sh_avail,
                       Sh.slcolor,
                       Sh.slminlen,
                       sh.slminlen * un.un_fact as slminlen_cm,
                       sh.slmaxlen,
                       sh.slmaxlen * slmaxlen_cm as as slmaxlen * un.un_fact,
                       Sh.slunit
                  Shoe_data Sh, Un
                 여기서 sh.slunit = un.un_name) rsh,
               (S.SL_NAME 선택,
                       s.sl_avail,
                       s.sl_color,
                       s.sl_len,
                       s.sl_unit,
                       s.sl_len * u.un_fact as sl_len_cm
                  shoelace_data s, unit u
                 여기서 s.sl_unit = u.un_name) rsl
         여기서 rsl.sl_color = rsh.slcolor
           및 rsl.sl_len_cm = rsh.slminlen_cm
           및 rsl.sl_len_cm <= rsh.slmaxlen_cm) shoe_ready
 여기서 int4ge (shoe_ready.total_avail, 2);

플래너 가이 나무를 2 레벨 쿼리 트리 : 병적 인 선택은입니다."풀링"중간 선택으로 별도로 처리 할 필요가 없기 때문입니다. 그러나 중간 선택은 상단과 분리되어 있습니다. 골재 기능이 포함되어 있습니다. 우리가 그것들을 끌어 올렸다면 그렇게 할 것입니다 우리가 원하지 않는 최상위 선택의 동작을 변경하십시오. 그러나 쿼리 트리를 무너 뜨리는 것은 최적화입니다. 시스템을 다시 작성할 필요가 없습니다.

참고 :현재 재귀 중지는 없습니다 규칙 시스템에서보기 규칙을위한 메커니즘 ( 다른 종류의 규칙). 이것은 크게 아프지 않습니다 이것을 끝없는 루프로 밀어 넣는 유일한 방법 ( 메모리 제한에 도달 할 때까지 백엔드) 테이블을 작성한 다음 Create와 함께 수작업으로보기 규칙을 설정하십시오. 그러한 방식으로, 하나는 다른 하나에서 선택합니다. 하나에서 선택합니다. 생성하면 결코 일어날 수 없습니다 뷰는 첫 번째 생성보기에 대해 사용됩니다. 관계는 존재하지 않으므로 첫 번째 견해는 두 번째에서 선택하십시오.

16.3.3. 보다 비 선택적 진술의 토토 사이트 순위

구문 분석 나무의 두 세부 사항은 위의보기 토토 사이트 순위에 대한 설명. 이것들은 명령 유형입니다 결과 관계. 실제로, 토토 사이트 순위은 이것을 필요로하지 않습니다 정보.

Parse Tree 사이에는 몇 가지 차이가 있습니다. 다른 명령을 선택하고 하나를 선택하십시오. 분명히 그들은 가지고 있습니다 다른 명령 유형 및 이번에는 결과 관계 지점 결과가 진행되는 범위 테이블 항목에. 모든 것 그렇지 않으면 절대적으로 동일합니다. 따라서 두 개의 테이블 T1과 T2가 있습니다 속성 A와 B를 사용하여 두 개를위한 파스 트리 진술

t1, t2에서 t2.b를 선택하십시오. 여기서 t1.a = t2.a;

T1 Set B = T2.B 업데이트 여기서 T1.A = T2.A;

거의 동일합니다.

  • 범위 테이블에는 테이블 T1 및 T2.

  • 대상 목록에는 하나의 변수가 포함됩니다 표 T2의 범위 테이블 항목의 속성 B.

  • 자격 표현식은 속성을 비교합니다 평등을위한 두 범위 중.

  • 결합 나무는 T1과 T2 사이의 간단한 결합을 보여줍니다.

결과는 양방향 나무가 비슷한 결과를 초래한다는 것입니다. 실행 계획. 둘 다 두 테이블에 합류합니다. 을 위한 T1의 누락 된 열 업데이트가 대상에 추가됩니다. 플래너의 목록과 최종 구문 분석 트리는로 읽습니다.

업데이트 t1 설정 a = t1.a, b = t2.b 여기서 t1.a = t2.a;

따라서 Executor가 Join을 통해 달리면 정확히 생성됩니다. 동일한 결과 세트 A

t1.a, t2.b에서 t1.a = t2.a;를 선택하십시오.

할 것입니다. 그러나 업데이트에는 약간의 문제가 있습니다. 그만큼 집행자는 가입 결과가 무엇인지 신경 쓰지 않습니다. 하는 것은 결과는 단지 결과 집합을 생성합니다. 그만큼 하나는 선택된 명령이고 다른 하나는 업데이트는 집행자의 발신자에서 처리됩니다. 발신자 아직도 (구문 분석 트리를보고) 이것은 업데이트라는 것을 알고 있습니다. 그리고 그는이 결과가 표 T1로 들어가야한다는 것을 알고 있습니다. 하지만 새로운 행을 새로운 것으로 대체 해야하는 행 열?

이 문제를 해결하려면 다른 항목이 추가됩니다. 업데이트 (및 삭제)의 대상 목록 : 현재 튜플 ID (CTID). 이것은 시스템 속성을 포함합니다 행의 블록의 파일 블록 번호와 위치. 테이블을 알면 CTID는 업데이트 할 원본 T1 행입니다. CTID를 추가 한 후 대상 목록, 쿼리는 실제로

t1.a, t2.b, t1.ctid에서 t1, t2에서 t1.a = t2.a;를 선택하십시오.

이제 또 다른 세부 사항토토 사이트 순위무대에 들어갑니다. 이것에 순간, 테이블 행은 덮어 쓰지 않았으며 이것이 중단되는 이유입니다. 거래는 빠릅니다. 업데이트에서는 새로운 결과 행이 있습니다 테이블에 (CTID를 벗기고 나서) 튜플에 삽입 CTID가 CMAX와 XMAX를 가리키는 행의 헤더 항목은 현재 명령 카운터 및 현재로 설정됩니다. 거래 ID. 따라서 오래된 행은 숨겨져 있으며 그 이후에 트랜잭션은 진공 청소기가 실제로 이동할 수 있습니다 밖으로.

모든 것을 알고, 우리는 단순히보기 토토 사이트 순위을 적용 할 수 있습니다. 어떤 명령과 같은 방식으로. 아니요 차이점.

16.3.4. 그만큼 의 견해의 힘토토 사이트 순위

상기는 토토 사이트 순위 시스템이보기를 통합하는 방법을 보여줍니다 원래 구문 분석 트리에 대한 정의. 두 번째 예에서 One View에서 간단한 선택은 최종 구문 분석 트리를 만들었습니다. 4 개의 테이블의 결합입니다 (단위는 다른 두 번 사용됩니다. 이름).

16.3.4.1. 이익

토토 사이트 순위 시스템으로 뷰를 구현하는 이점은, 플래너가 어떤 테이블에 대한 모든 정보를 가지고 있음 스캔해야합니다 테이블과보기의 제한적인 자격 또한 원본 쿼리의 자격은 하나의 싱글 문장 나무. 그리고 이것은 여전히 원본이 될 때입니다 쿼리는 이미 조회수에 대한 가입입니다. 이제 플래너는해야합니다 쿼리를 실행하는 가장 좋은 경로를 결정하십시오. 더 플래너의 정보는이 결정이 더 좋을 수 있습니다. 그리고 구현 된 토토 사이트 순위 시스템토토 사이트 순위이것이 전부인지 확인합니다 지금까지 쿼리에 대한 정보가 제공됩니다.

16.3.5. 업데이트는 어떻습니까 보다?

보기가 대상 관계로 지명되면 어떻게되는지 삽입, 업데이트 또는 삭제? 대체 후 위에서 설명한 결과, 결과는 쿼리 트리가 있습니다. 하위 쿼리 테이블 항목의 관계 지점. 이것은 그렇지 않을 것입니다 작동하여 다시 작성자가 오류가 발생하는 경우 오류를 던집니다. 그런 일을 제작했습니다.

이것을 변경하려면 동작을 수정하는 규칙을 정의 할 수 있습니다. 비 선택적 쿼리. 이것이 다음 주제입니다 부분.