Phiên bản không được hỗ trợ:7.0
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn kèo chấp bóng đá hôm nay nay cùng một trang chohiện tạiPhiên bản hoặc một trong kèo chấp bóng đá hôm nay phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

Xem và Hệ thống kèo chấp bóng đá hôm nay

Thực hiện của các chế độ kèo chấp bóng đá hôm nay trongPostgres

chế độ kèo chấp bóng đá hôm nay trongPostgreslà được thực hiện bằng cách sử dụng hệ thống kèo chấp bóng đá hôm nay. Trong thực tế hoàn toàn không có sự khác biệt giữa a

Tạo kèo chấp bóng đá hôm nay myView là chọn * từ mytab;
so với hai lệnh
Tạo bảng MyView (cùng danh sách thuộc tính với MyTab);
    Tạo quy tắc "_retMyView" như trên chọn kèo chấp bóng đá hôm nayo myView do thay thế
        Chọn * từ mytab;
Bởi vì đây chính xác là những gì lệnh creat View thực hiện trong nội bộ. Điều này có một số tác dụng phụ. Một trong số đó là thông tin về chế độ kèo chấp bóng đá hôm nay trongPostgresDanh mục hệ thống hoàn toàn giống nhau như nó là cho một bàn. Vì vậy, đối với các trình phân tích cú pháp truy vấn, hoàn toàn có Không có sự khác biệt giữa một bảng và một chế độ kèo chấp bóng đá hôm nay. Họ giống nhau - quan hệ. Đó là cái quan trọng bây giờ.

Cách chọn kèo chấp bóng đá hôm nay Công việc

kèo chấp bóng đá hôm nay chọn được áp dụng cho tất cả các truy vấn làm bước cuối cùng, Ngay cả khi lệnh được đưa ra là một chèn, cập nhật hoặc xóa. Và họ có các ngữ nghĩa khác nhau với những người khác ở chỗ họ sửa đổi Parsetree tại chỗ thay vì tạo ra một cái mới. Vì vậy, chọn kèo chấp bóng đá hôm nay được mô tả đầu tiên.

Hiện tại, chỉ có thể có một hành động và nó phải là một Chọn hành động thay thế. Hạn chế này được yêu cầu Làm cho các kèo chấp bóng đá hôm nay đủ an toàn để mở chúng cho người dùng thông thường và nó Hạn chế các kèo chấp bóng đá hôm nay trên Chọn kèo chấp bóng đá hôm nay xem thực.

Ví dụ cho tài liệu này là hai chế độ xem tham gia thực hiện một số Tính toán và một số quan điểm khác lần lượt sử dụng chúng. Một trong hai Các chế độ xem đầu tiên được tùy chỉnh sau bằng cách thêm các quy tắc để chèn, cập nhật và xóa các hoạt động để kết quả cuối cùng sẽ là một quan điểm Hành xử giống như một bảng thực sự với một số chức năng ma thuật. Nó không phải là Một ví dụ đơn giản như vậy để bắt đầu và điều này làm cho mọi thứ khó khăn hơn Nhận kèo chấp bóng đá hôm nayo. Nhưng tốt hơn là có một ví dụ bao gồm tất cả Các điểm được thảo luận từng bước thay vì có nhiều khác nhau những người có thể trộn lẫn trong tâm trí.

Cơ sở dữ liệu cần chơi trên kèo chấp bóng đá hôm nay ví dụ được đặt tên là Al_Bundy. Bạn sẽ thấy sớm tại sao đây là tên cơ sở dữ liệu. Và nó cần Ngôn ngữ thủ tục PL/PGSQL được cài đặt, vì chúng tôi cần một chút Hàm Min () Trả về thấp hơn của 2 giá trị số nguyên. Chúng tôi tạo ra đó là

Tạo hàm tối thiểu (số nguyên, số nguyên) trả về số nguyên như
        'BẮT ĐẦU
            Nếu $ 1 <$ 2 thì
                Trả lại $ 1;
            Kết thúc nếu;
            Trả lại $ 2;
        KẾT THÚC;'
    Ngôn ngữ 'plpgsql';

Các bảng thực sự chúng ta cần trong hai hệ thống kèo chấp bóng đá hôm nay đầu tiên Mô tả là:

Tạo bảng giày_data (
        Shoename char (10), - khóa chính
        Số nguyên sh_avail, - Có sẵn # kèo chấp bóng đá hôm nay cặp
        Slcolor Char (10), - Màu Shoelace ưa thích
        Slminlen Float, - Miminum Shoelace Chiều dài
        Phao SLMAXLEN, - chiều dài dây giày tối đa
        Slunit Char (8) - Đơn vị chiều dài
    );

    Tạo bảng Shoelace_Data (
        sl_name char (10), - khóa chính
        Số nguyên SL_AVAIL, - Có sẵn # kèo chấp bóng đá hôm nay cặp
        SL_Color Char (10), - Màu Shoelace
        sl_len float, - chiều dài dây giày
        SL_Unit Char (8) - Đơn vị chiều dài
    );

    Tạo đơn vị bảng (
        un_name char (8), - khóa chính
        un_fact float - yếu tố chuyển đổi thành cm
    );
Tôi nghĩ rằng hầu hết chúng ta mang giày và có thể nhận ra rằng đây là Dữ liệu thực sự hữu ích. Vâng, có những đôi giày trên thế giới không yêu cầu dây giày, nhưng điều này không làm cho cuộc sống của Al dễ dàng hơn và Vì vậy, chúng tôi bỏ qua nó.

Các chế độ kèo chấp bóng đá hôm nay được tạo dưới dạng

Tạo giày kèo chấp bóng đá hôm nay AS
        Chọn Sh.Shoename,
               sh.sh_avail,
               sh.slcolor,
               sh.slminlen,
               sh.slminlen * un.un_fact dưới dạng slminlen_cm,
               sh.slmaxlen,
               sh.slmaxlen * un.un_fact dưới dạng slmaxlen_cm,
               Sh.Slunit
          Từ giày_data sh, unit un
         Trong đó sh.slunit = un.un_name;

    Tạo Chế độ kèo chấp bóng đá hôm nay Shoelace như
        Chọn 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
          Từ shoelace_data s, đơn vị u
         Trong đó s.sl_unit = u.un_name;

    Tạo kèo chấp bóng đá hôm nay giày_ready AS
        Chọn rsh.shoename,
               rsh.sh_avail,
               rsl.sl_name,
               rsl.sl_avail,
               tối thiểu (rsh.sh_avail, rsl.sl_avail) dưới dạng TOTAL_AVAIL
          Từ RSH giày, dây giày RSL
         WHERE RSL.SL_COLOR = RSH.SLCOLOR
           Và rsl.sl_len_cm = rsh.slminlen_cm
           Và rsl.sl_len_cm <= rsh.slmaxlen_cm;
Lệnh tạo Chế độ kèo chấp bóng đá hôm nay choShoelacekèo chấp bóng đá hôm nay (cái đơn giản nhất chúng tôi có) sẽ tạo một dây giày quan hệ và một mục nhập trongPG_REWRITEĐiều đó cho biết rằng có một quy tắc viết lại phải được áp dụng bất cứ khi nào dây giày quan hệ được tham chiếu Trong một truy vấn có thể nói. Quy tắc không có trình độ quy tắc (được thảo luận trong các quy tắc không chọn vì các quy tắc chọn hiện tại không thể có chúng) và thay kèo chấp bóng đá hôm nayo đó là nó. Lưu ý rằng trình độ quy tắc không giống như trình độ truy vấn! Hành động quy tắc có một trình độ chuyên môn.

Hành động kèo chấp bóng đá hôm nay là một truy vấn là bản sao chính xác của Chọn câu lệnh trong lệnh tạo xem.

Lưu ý:Hai mục bảng bổ sung cho mới và cũ (Được đặt tên * mới * và * hiện tại * vì lý do lịch sử kèo chấp bóng đá hôm nay bản in Querytree) Bạn có thể thấy kèo chấp bóng đá hôm nayPG_REWRITEMục nhập không quan tâm đến Chọn kèo chấp bóng đá hôm nay.

Bây giờ chúng tôi dân cưĐơn vị, giày_dataShoelace_datavà al loại chọn đầu tiên kèo chấp bóng đá hôm nay mạng sống:
al_bundy = chèn kèo chấp bóng đá hôm nayo các giá trị đơn vị ('cm', 1.0);
    al_bundy = chèn kèo chấp bóng đá hôm nayo các giá trị đơn vị ('m', 100.0);
    al_bundy = chèn kèo chấp bóng đá hôm nayo các giá trị đơn vị ('inch', 2.54);
    al_bundy = 
    Al_bundy = Chèn kèo chấp bóng đá hôm nayo giá trị giày_data 
    al_bundy- ('sh1', 2, 'đen', 70.0, 90.0, 'cm');
    Al_bundy = Chèn kèo chấp bóng đá hôm nayo giá trị giày_data 
    al_bundy- ('sh2', 0, 'đen', 30.0, 40.0, 'inch');
    Al_bundy = Chèn kèo chấp bóng đá hôm nayo giá trị giày_data 
    al_bundy- ('sh3', 4, 'brown', 50.0, 65.0, 'cm');
    Al_bundy = Chèn kèo chấp bóng đá hôm nayo giá trị giày_data 
    al_bundy- ('sh4', 3, 'brown', 40.0, 50.0, 'inch');
    al_bundy = 
    Al_Bundy = Chèn kèo chấp bóng đá hôm nayo giá trị Shoelace_Data 
    al_bundy- ('sl1', 5, 'đen', 80.0, 'cm');
    Al_Bundy = Chèn kèo chấp bóng đá hôm nayo giá trị Shoelace_Data 
    al_bundy- ('sl2', 6, 'đen', 100.0, 'cm');
    Al_Bundy = Chèn kèo chấp bóng đá hôm nayo giá trị Shoelace_Data 
    al_bundy- ('sl3', 0, 'đen', 35.0, 'inch');
    Al_Bundy = Chèn kèo chấp bóng đá hôm nayo giá trị Shoelace_Data 
    al_bundy- ('SL4', 8, 'đen', 40.0, 'inch');
    Al_Bundy = Chèn kèo chấp bóng đá hôm nayo giá trị Shoelace_Data 
    al_bundy- ('SL5', 4, 'Brown', 1.0, 'M');
    Al_Bundy = Chèn kèo chấp bóng đá hôm nayo giá trị Shoelace_Data 
    al_bundy- ('sl6', 0, 'brown', 0,9, 'm');
    Al_Bundy = Chèn kèo chấp bóng đá hôm nayo giá trị Shoelace_Data 
    Al_bundy- ('SL7', 7, 'Brown', 60, 'CM');
    Al_Bundy = Chèn kèo chấp bóng đá hôm nayo giá trị Shoelace_Data 
    Al_bundy- ('SL8', 1, 'Brown', 40, 'inch');
    al_bundy = 
    al_bundy = Chọn * từ Shoelace;
    SL_NAME | SL_AVAIL | SL_COLOR | SL_LEN | SL_UNIT | SL_LEN_CM
    ----------+--------+----------+------+--------+---------
    SL1 |       5 | Đen |    80 | cm |       80
    SL2 |       6 | Đen |   100 | cm |      100
    SL7 |       7 | Brown |    60 | cm |       60
    SL3 |       0 | Đen |    35 | inch |     88.9
    SL4 |       8 | Đen |    40 | inch |    101.6
    SL8 |       1 | Brown |    40 | inch |    101.6
    SL5 |       4 | Brown |     1 | m |      100
    SL6 |       0 | Brown |   0,9 | m |       90
    (8 hàng)
Đó là lựa chọn đơn giản nhất có thể làm theo quan điểm của chúng tôi, vì vậy chúng tôi lấy Điều này để giải thích những điều cơ bản của các kèo chấp bóng đá hôm nay xem. 'Chọn * từ Shoelace 'được giải thích bởi trình phân tích cú pháp và tạo ra parsetree
Chọn Shoelace.SL_NAME, SHOELACE.SL_AVAIL,
           Shoelace.SL_Color, Shoelace.SL_LEN,
           Shoelace.SL_Unit, Shoelace.SL_LEN_CM
      Từ dây giày Shoelace;
Và điều này được đưa ra cho hệ thống kèo chấp bóng đá hôm nay. Hệ thống kèo chấp bóng đá hôm nay đi bộ thông qua khoảng trống và kiểm tra xem có kèo chấp bóng đá hôm nay trongPG_REWRITEĐối với bất kỳ mối quan hệ nào. Khi xử lý mục nhập cảnh choShoelace(duy nhất một cho đến bây giờ) nó tìm thấy kèo chấp bóng đá hôm nay '_retshoelace' với parsetree
    Chọn S.SL_NAME, S.SL_AVAIL,
           s.sl_color, s.sl_len, s.sl_unit,
           float8mul (s.sl_len, u.un_fact) là SL_LEN_CM
      Từ Shoelace *cũ *, Shoelace *Mới *,
           shoelace_data s, đơn vị u
     WHERE bpchareq (s.sl_unit, u.un_name);
Lưu ý rằng trình phân tích cú pháp đã thay đổi tính toán và Trình độ chuyên môn kèo chấp bóng đá hôm nayo các cuộc gọi đến các chức năng thích hợp. Nhưng trong thực tế Điều này không thay đổi gì. Bước đầu tiên để viết lại là hợp nhất Hai Rangetables. Parsetree kết quả sau đó đọc
Chọn Shoelace.SL_Name, Shoelace.SL_AVAIL,
           Shoelace.SL_Color, Shoelace.SL_LEN,
           Shoelace.SL_Unit, Shoelace.SL_LEN_CM
      Từ dây giày Shoelace,Shoelace *cũ *,
           Shoelace *mới *, Shoelace_data S,
           Đơn vị U;
Trong bước 2, nó thêm trình độ từ hành động quy tắc kèo chấp bóng đá hôm nayo parsetree dẫn đến
Chọn Shoelace.SL_NAME, SHOELACE.SL_AVAIL,
           Shoelace.SL_Color, Shoelace.SL_LEN,
           Shoelace.SL_Unit, Shoelace.SL_LEN_CM
      Từ dây giày, dây giày *cũ *,
           Shoelace *Mới *, Shoelace_Data S,
           Đơn vị uWHERE bpchareq (s.sl_unit, u.un_name);
Và trong bước 3, nó thay thế tất cả kèo chấp bóng đá hôm nay biến trong parsetree, tham chiếu đó mục nhập Rangeable (một choShoelacehiện đang được xử lý) bởi Biểu thức TargetList tương ứng từ hành động kèo chấp bóng đá hôm nay. Cái này kết quả trong truy vấn cuối cùng
ChọnS.SL_NAME, S.SL_AVAIL, 
           S.SL_COLOR, S.SL_LEN, 
           S.SL_UNIT, float8mul (s.sl_len, u.un_fact)như SL_LEN_CM
      Từ dây giày, dây giày *cũ *,
           Shoelace *Mới *, Shoelace_Data S,
           đơn vị u
     WHERE bpchareq (s.sl_unit, u.un_name);
Biến cái này trở lại thành thậtSQLTuyên bố Người dùng người sẽ nhập đọc
Chọn S.SL_NAME, S.SL_AVAIL,
           s.sl_color, s.sl_len,
           s.sl_unit, s.sl_len * u.un_fact dưới dạng sl_len_cm
      Từ shoelace_data s, đơn vị u
     kèo chấp bóng đá hôm nay đó s.sl_unit = U.un_name;
Đó là kèo chấp bóng đá hôm nay đầu tiên được áp dụng. Trong khi điều này đã được thực hiện, Rangetable đã phát triển. Vì vậy, hệ thống kèo chấp bóng đá hôm nay tiếp tục kiểm tra Mục nhập bảng phạm vi. Cái tiếp theo là số 2 (Shoelace *cũ *). Mối quan hệShoelacecó kèo chấp bóng đá hôm nay, nhưng điều này mục nhập cảnh không được tham chiếu trong bất kỳ biến nào của Parsetree, vì vậy nó bị bỏ qua. Vì tất cả các khoảng thời gian còn lại Các mục nhập không có kèo chấp bóng đá hôm nay trongPG_REWRITEhoặc không được tham chiếu, nó đạt đến kết thúc của Rangetable. Viết lại hoàn tất và ở trên là lần cuối cùng kết quả được đưa kèo chấp bóng đá hôm nayo trình tối ưu hóa. Trình tối ưu hóa bỏ qua thêm các mục nhập khoảng không được tham chiếu bởi các biến trong parsetree và kế hoạch được sản xuất bởi người lập kế hoạch/trình tối ưu hóa sẽ thay kèo chấp bóng đá hôm nayo đó chính xác giống như khi al đã nhập truy vấn chọn ở trên thay thế của lựa chọn chế độ xem.

Bây giờ chúng ta phải đối mặt với vấn đề anh em blues xuất hiện kèo chấp bóng đá hôm nay cửa hàng của anh ấy và muốn mua một số đôi giày mới, và như The Blues Anh em, họ muốn mang cùng một đôi giày. Và họ muốn mặc chúng ngay lập tức, vì vậy chúng cũng cần dây giày.

Al cần biết những đôi giày hiện đang có trong cửa hàng mà anh ấy có dây giày phù hợp (màu sắc và kích thước) và nơi tổng số của kèo chấp bóng đá hôm nay cặp khớp chính xác lớn hơn hoặc bằng hai. Chúng tôi là anh ấy Cách làm và anh ấy hỏi cơ sở dữ liệu của mình:

al_bundy = Chọn * từ giày_raily kèo chấp bóng đá hôm nay đó Total_avail = 2;
    Shoename | sh_avail | SL_NAME | SL_AVAIL | TOTAL_AVAIL
    ----------+--------+----------+--------+-----------
    Sh1 |       2 | SL1 |       5 |          2
    Sh3 |       4 | SL7 |       7 |          4
    (2 hàng)
AL là kèo chấp bóng đá hôm nay chuyên gia giày và vì vậy anh ta biết rằng chỉ những đôi giày kiểu Sh1 sẽ phù hợp (Shoelace SL7 có màu nâu và những đôi giày cần màu nâu Shoelaces không phải giày mà anh em blues sẽ đi).

Đầu ra của trình phân tích cú pháp lần này là parsetree

18881_19102
kèo chấp bóng đá hôm nay đầu tiên được áp dụng sẽ là một kèo chấp bóng đá hôm nay choShoe_ReadyMối quan hệ và nó dẫn đến parsetree
Chọnrsh.shoename, rsh.sh_avail,
           RSL.SL_NAME, RSL.SL_AVAIL,
           min (rsh.sh_avail, rsl.sl_avail) dưới dạng Total_avail19524_19561giày_ready *cũ *,
           Shoe_Ready *mới *, giày RSH,
           Shoelace RSLkèo chấp bóng đá hôm nay đó int4ge (min (rsh.sh_avail, rsl.sl_avail), 2)và (bpchareq (rsl.sl_color, rsh.slcolor)
            Và float8ge (rsl.sl_len_cm, rsh.slminlen_cm)
            Và float8le (RSL.SL_LEN_CM, RSH.SLMAXLEN_CM)
           );
Trong thực tế, các điều khoản trong trình độ chuyên môn sẽ Các nút vận hành thuộc loại và với biểu thức trái và phải. Nhưng điều đó làm cho nó ít có thể đọc được hơn như đã có, và có nhiều hơn quy tắc để áp dụng. Vì vậy, tôi chỉ đưa chúng kèo chấp bóng đá hôm nayo một số parantheses để nhóm chúng thành các đơn vị hợp lý theo thứ tự họ đã thêm kèo chấp bóng đá hôm nayo và chúng tôi Tiếp tục với quy tắc cho mối quan hệgiàyvì đây là mục nhập tiếp theo được tham chiếu và có kèo chấp bóng đá hôm nay luật lệ. Kết quả của việc áp dụng nó là
Chọnsh.shoename, sh.sh_avail,,
           RSL.SL_NAME, RSL.SL_AVAIL,
           tối thiểu (sh.sh_avail, RSL.SL_AVAIL) là Total_avail,
      Từ giày_ready whoe_ready, shoe_ready *cũ *,
           giày_ready *mới *, giày RSH,
           Shoelace RSL,giày *cũ *,
           giày *mới *, Shoe_data SH,
           đơn vị unWHERE (int4ge (min (sh.sh_avail, RSL.SL_AVAIL), 2)
            Và (bpchareq (rsl.sl_color,sh.slcolor)
                 Và float8ge (rsl.sl_len_cm,float8mul (sh.slminlen, un.un_fact))
                 Và float8le (rsl.sl_len_cm,float8mul (sh.slmaxlen, un.un_fact))
                )
           )và bpchareq (sh.slunit, un.un_name);
Và cuối cùng chúng tôi áp dụng kèo chấp bóng đá hôm nay đã được biết đến choShoelace(lần này là trên kèo chấp bóng đá hôm nay parsetree mà phức tạp hơn kèo chấp bóng đá hôm nay chút) và nhận
Chọn sh.shoename, sh.sh_avail,S.SL_NAME, S.SL_AVAIL,
           tối thiểu (sh.sh_avail,S.SL_AVAIL) như Total_avail
      Từ giày_ready whoe_ready, shoe_ready *cũ *,
           giày_ready *mới *, giày RSH,
           Shoelace rsl, giày *cũ *,
           giày *mới *, giày_data sh,
           đơn vị un,Shoelace *cũ *,
           Shoelace *mới *, Shoelace_data S,
           Đơn vị UWHERE ((int4ge (min (sh.sh_avail,S.SL_AVAIL), 2)
                 Và (bpchareq (S.SL_COLOR, Sh.SlColor)
                      Và float8ge (float8mul (s.sl_len, u.un_fact),, 
                                   float8mul (sh.slminlen, un.un_fact)))
                      Và float8le (float8mul (s.sl_len, u.un_fact),, 
                                   float8mul (sh.slmaxlen, un.un_fact)))
                     )
                )
            Và bpchareq (sh.slunit, un.un_name)
           )và bpchareq (s.sl_unit, u.un_name);
kèo chấp bóng đá hôm nay lần nữa chúng ta giảm nó thành kèo chấp bóng đá hôm nay thậtSQLCâu lệnh tương đương với đầu ra cuối cùng của kèo chấp bóng đá hôm nay hệ thống:
Chọn sh.shoename, sh.sh_avail,
           s.sl_name, s.sl_avail,
           tối thiểu (sh.sh_avail, s.sl_avail) là Total_avail
      Từ giày_data SH, Shoelace_Data S, Đơn vị U, Đơn vị UN
     WHERE min (sh.sh_avail, s.sl_avail) = 2
       Và S.SL_Color = sh.slColor
       Và S.SL_LEN * U.un_fact = sh.slminlen * un.un_fact
       Và S.SL_LEN * U.UN_FACT <= sh.slmaxlen * un.un_fact
       Và sh.sl_unit = un.un_name
       Và s.sl_unit = U.un_name;
Xử lý đệ quy các kèo chấp bóng đá hôm nay viết lại một lựa chọn từ chế độ xem thành một parsetree, tương đương với chính xác những gì Al phải Loại nếu không có chế độ xem nào cả.

Lưu ý:Hiện tại không có việc dừng đệ quy cơ chế cho các kèo chấp bóng đá hôm nay xem trong hệ thống kèo chấp bóng đá hôm nay (chỉ dành cho các kèo chấp bóng đá hôm nay khác kèo chấp bóng đá hôm nay). Điều này không bị tổn thương nhiều, bởi vì cách duy nhất để thúc đẩy điều này thành một vòng lặp vô tận (thổi lên phần phụ trợ cho đến khi nó đạt đến giới hạn bộ nhớ) là tạo các bảng và sau đó thiết lập các kèo chấp bóng đá hôm nay xem bằng cách tạo kèo chấp bóng đá hôm nay tạo theo cách như vậy, người ta chọn từ khác chọn từ một. Điều này không bao giờ có thể xảy ra nếu Tạo chế độ xem được sử dụng vì trên chế độ xem đầu tiên, lần thứ hai quan hệ không tồn tại và do đó, chế độ xem đầu tiên không thể chọn từ thứ hai.

Xem các kèo chấp bóng đá hôm nay trong Các câu lệnh không chọn

Hai chi tiết của parsetree không được chạm kèo chấp bóng đá hôm nayo trong mô tả của các quy tắc xem ở trên. Đây là chỉ huy và Resultrelation. Trên thực tế, xem các quy tắc không cần những điều này thông tin.

Chỉ có một kèo chấp bóng đá hôm nayi sự khác biệt giữa một parsetree cho a Chọn và một cho bất kỳ lệnh nào khác. Rõ ràng là họ có một chỉ huy và lần này các kết quả được chỉ ra Mục nhập Rangetable nơi kết quả nên đi. Bất cứ điều gì khác là Hoàn toàn giống nhau. Vì vậy, có hai bảng T1 và T2 với các thuộc tính a và b, parsetrees cho hai câu

Chọn T2.b từ T1, T2 kèo chấp bóng đá hôm nay đó t1.a = T2.a;

    CẬP NHẬT T1 Đặt B = T2.b kèo chấp bóng đá hôm nay đó T1.A = T2.a;
gần giống nhau.
  • Rangetables chứa kèo chấp bóng đá hôm nay mục cho kèo chấp bóng đá hôm nay bảng T1 và T2.

  • Danh sách mục tiêu chứa kèo chấp bóng đá hôm nay biến chỉ ra thuộc tính B của mục nhập Range có thể cho Bảng T2.

  • Biểu thức đủ điều kiện so sánh kèo chấp bóng đá hôm nay thuộc tính A của cả hai phạm vi cho sự bình đẳng.

Hậu quả là, cả hai parsetrees đều dẫn đến tương tự kế hoạch thực hiện. Cả hai đều tham gia trên hai bảng. Cho Cập nhật các cột bị thiếu từ T1 được thêm kèo chấp bóng đá hôm nayo danh sách mục tiêu bằng cách Trình tối ưu hóa và parsetree cuối cùng sẽ đọc là
CẬP NHẬT T1 Đặt A = T1.A, B = T2.B kèo chấp bóng đá hôm nay đó T1.A = T2.A;
Và do đó, người thực thi chạy qua tham gia sẽ tạo ra chính xác Kết quả tương tự được đặt làm
Chọn T1.A, T2.b từ T1, T2 kèo chấp bóng đá hôm nay đó T1.A = T2.A;
Sẽ làm. Nhưng có một vấn đề nhỏ trong cập nhật. Các Người thực thi không quan tâm kết quả từ sự tham gia của nó đang làm có nghĩa là cho. Nó chỉ tạo ra một tập hợp kết quả của các hàng. Các sự khác biệt rằng một là lệnh chọn và khác là bản cập nhật được xử lý trong người gọi của người thực thi. Người gọi vẫn biết (nhìn kèo chấp bóng đá hôm nayo parsetree) rằng đây là một bản cập nhật và anh ấy biết rằng kết quả này sẽ đi kèo chấp bóng đá hôm nayo Bảng T1. Nhưng trong số 666 hàng Điều đó phải được thay thế bằng hàng mới? Kế hoạch được thực hiện là tham gia với một trình độ có khả năng tạo ra bất kỳ Số lượng hàng từ 0 đến 666 theo thứ tự không xác định.

Để giải quyết vấn đề này, một mục nhập khác được thêm kèo chấp bóng đá hôm nayo Danh sách TargetL trong bản cập nhật và xóa các câu lệnh. ID Tuple hiện tại (CTID). Đây là một thuộc tính hệ thống với một tính năng đặc biệt. Nó Chứa khối và vị trí trong khối cho hàng. Biết Bảng, CTID có thể được sử dụng để tìm một hàng cụ thể trong 1,5GB Bảng có kích thước chứa hàng triệu hàng bằng cách tìm nạp một dữ liệu duy nhất khối. Sau khi thêm CTID kèo chấp bóng đá hôm nayo danh sách mục tiêu, kết quả cuối cùng Đặt có thể được định nghĩa là

Chọn T1.A, T2.B, T1.CTID từ T1, T2 kèo chấp bóng đá hôm nay đó T1.A = T2.A;
Bây giờ là kèo chấp bóng đá hôm nay chi tiết khác củaPostgresBước kèo chấp bóng đá hôm nayo giai đoạn. Tại thời điểm này, Các hàng bảng không được ghi đè và đây là lý do tại sao giao dịch hủy bỏ là nhanh. Trong một bản cập nhật, hàng kết quả mới được chèn kèo chấp bóng đá hôm nayo bảng (sau khi tước CTID) và trong tiêu đề Tuple của hàng CTID chỉ kèo chấp bóng đá hôm nayo các mục CMAX và XMAX được đặt thành lệnh hiện tại Bộ đếm và ID giao dịch hiện tại. Do đó hàng cũ được ẩn và Sau khi giao dịch cam kết, máy hút bụi thực sự có thể di chuyển nó ra.

Biết rằng tất cả, chúng ta chỉ có thể áp dụng các kèo chấp bóng đá hôm nay xem hoàn toàn cùng một cách để bất kỳ lệnh. Không có sự khác biệt.

Sức mạnh của Lượt kèo chấp bóng đá hôm nay trongPostgres

Trên đây cho thấy cách hệ thống quy tắc kết hợp chế độ xem Định nghĩa kèo chấp bóng đá hôm nayo parsetree ban đầu. Trong ví dụ thứ hai a Chọn đơn giản từ một chế độ xem đã tạo ra một parsetree cuối cùng là một Tham gia 4 bảng (đơn vị được sử dụng hai lần với các tên khác nhau).

Lợi ích

Lợi ích của việc thực hiện các quan điểm với hệ thống quy tắc là, đó là Trình tối ưu hóa có tất cả thông tin về bảng nào được quét cộng với các mối quan hệ giữa các bảng này cộng với Trình độ hạn chế từ các lượt xem cộng với trình độ Từ truy vấn ban đầu trong một parsetree duy nhất. Và đây vẫn là Tình huống khi truy vấn ban đầu đã tham gia kèo chấp bóng đá hôm nayo các lượt xem. Bây giờ trình tối ưu hóa phải quyết định đâu là con đường tốt nhất để thực hiện Truy vấn. Trình tối ưu hóa càng có nhiều thông tin, điều này càng tốt Quyết định có thể. Và hệ thống quy tắc như được thực hiện trongPostgresĐảm bảo rằng đây là tất cả thông tin Có sẵn về truy vấn cho đến nay.

Mối quan tâm

Có kèo chấp bóng đá hôm nay thời gian dài màPostgresHệ thống kèo chấp bóng đá hôm nay đã được coi là bị hỏng. Việc sử dụng các kèo chấp bóng đá hôm nay không được khuyến nghị và phần duy nhất làm việc là Xem các kèo chấp bóng đá hôm nay. Và những kèo chấp bóng đá hôm nay quan điểm này cũng đưa ra vấn đề vì Hệ thống kèo chấp bóng đá hôm nay không thể áp dụng chúng đúng cách cho các tuyên bố khác hơn một lựa chọn (ví dụ: bản cập nhật đã sử dụng dữ liệu từ chế độ xem không hoạt động).

Trong thời gian đó, sự phát triển đã di chuyển và nhiều tính năng thêm kèo chấp bóng đá hôm nayo trình phân tích cú pháp và trình tối ưu hóa. Hệ thống quy tắc có nhiều hơn và không đồng bộ với khả năng của họ và nó trở nên khó khăn hơn và Khó hơn để bắt đầu sửa chữa nó. Vì vậy, không ai làm.

Trong 6.4, ai đó đã khóa cửa, hít một hơi thật sâu và xáo trộn điều đáng nguyền rủa đó lên. Những gì đưa ra là một hệ thống kèo chấp bóng đá hôm nay với Các khả năng được mô tả trong tài liệu này. Nhưng vẫn còn Một số cấu trúc không được xử lý và một số nơi nó thất bại do mọi thứ hiện không được hỗ trợ bởiPostgresTrình tối ưu hóa truy vấn.

  • Xem với các cột tổng hợp có vấn đề xấu. Tổng hợp Biểu thức trong trình độ phải được sử dụng trong phần phụ. Hiện tại không thể tham gia cùng hai lượt xem, mỗi cái có một cột tổng hợp và so sánh hai tập hợp giá trị trong trình độ chuyên môn. Trong khi đó, có thể Đặt các biểu thức tổng hợp này kèo chấp bóng đá hôm nayo các chức năng với Đối số thích hợp và sử dụng chúng trong định nghĩa chế độ xem.

  • lượt xem của các công đoàn hiện không được hỗ trợ. Vâng, nó dễ dàng Để viết lại một lựa chọn đơn giản kèo chấp bóng đá hôm nayo một liên minh. Nhưng nó là một chút khó khăn nếu chế độ xem là một phần của tham gia thực hiện cập nhật.

  • Đặt hàng theo các điều khoản trong các định nghĩa kèo chấp bóng đá hôm nay không được hỗ trợ.

  • khác biệt không được hỗ trợ trong các định nghĩa kèo chấp bóng đá hôm nay.

Không có lý do chính đáng tại sao trình tối ưu hóa không nên xử lý kèo chấp bóng đá hôm nay cấu trúc parsetree mà trình phân tích cú pháp không bao giờ có thể sản xuất do Hạn chế trongSQLCú pháp. kèo chấp bóng đá hôm nay Tác giả hy vọng rằng những mục này biến mất trong tương lai.

Thực hiện Tác dụng phụ

Sử dụng hệ thống kèo chấp bóng đá hôm nay được mô tả để thực hiện các chế độ xem có tác dụng phụ. Những điều sau đây dường như không hoạt động:

AL_BUNDY = Chèn kèo chấp bóng đá hôm nayo giày (Shoename, Sh_avail, SlColor)
    al_bundy- giá trị ('sh5', 0, 'đen');
    Chèn 20128 1
    al_bundy = chọn Shoename, sh_avail, slcolor từ shoe_data;
    Shoename | sh_avail | Slcolor   
    ----------+--------+----------
    Sh1 |       2 | Đen     
    Sh3 |       4 | nâu     
    Sh2 |       0 | Đen     
    Sh4 |       3 | nâu     
    (4 hàng)
Điều thú vị là mã trả lại cho chèn đã đưa ra Chúng tôi một ID đối tượng và nói rằng 1 hàng đã được chèn kèo chấp bóng đá hôm nayo. Nhưng nó không xuất hiện tronggiày_data. Nhìn kèo chấp bóng đá hôm nayo thư mục cơ sở dữ liệu chúng ta có thể thấy, rằng tệp cơ sở dữ liệu cho Xem quan hệgiàyBây giờ dường như có kèo chấp bóng đá hôm nay khối dữ liệu. Và đó chắc chắn là trường hợp.

Chúng ta cũng có thể đưa ra xóa và nếu nó không có Trình độ chuyên môn, nó cho chúng ta biết rằng kèo chấp bóng đá hôm nay hàng đã bị xóa và tiếp theo Chạy chân không sẽ đặt lại tệp về không.

Lý do cho hành vi đó là, rằng parsetree cho Chèn không tham chiếugiàyMối quan hệ trong bất kỳ biến nào. Danh sách mục tiêu chỉ chứa không đổi giá trị. Vì vậy, không có quy tắc để áp dụng và nó không thay đổi kèo chấp bóng đá hôm nayo thực thi và hàng được chèn. Và vì vậy để xóa.

Để thay đổi điều này, chúng ta có thể xác định các kèo chấp bóng đá hôm nay sửa đổi hành vi của Truy vấn không chọn. Đây là chủ đề của phần tiếp theo.