Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4
9316_9387
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

38.4. tỷ lệ kèo bóng đá tối nay trêntỷ lệ kèo bóng đá tối nay, Cập tỷ lệ kèo bóng đá tối nayXóa

tỷ lệ kèo bóng đá tối nay được xác định trêntỷ lệ kèo bóng đá tối nay, Cập tỷ lệ kèo bóng đá tối nayXóakhác biệt đáng kể so với các tỷ lệ kèo bóng đá tối nay xem được mô tả trong phần trước. Đầu tiên, của họTạo tỷ lệ kèo bóng đá tối naylệnh cho phép thêm:

  • Họ được phép không có hành động.

  • Họ có thể có nhiều hành động.

  • Chúng có thểThay tỷ lệ kèo bóng đá tối nayo đóhoặccũng(mặc định).

  • Pseudorelationsmớitrở nên hữu ích.

  • Họ có thể có trình độ tỷ lệ kèo bóng đá tối nay.

Thứ hai, họ không sửa đổi cây truy vấn tại chỗ. Thay tỷ lệ kèo bóng đá tối nayo đó, chúng tạo ra không hoặc nhiều cây truy vấn mới và có thể vứt bỏ cái gốc.

38.4.1. Cách cập nhật tỷ lệ kèo bóng đá tối nay hoạt động

Giữ cú pháp:

Tạo [hoặc thay thế] tỷ lệ kèo bóng đá tối naytênnhư trênSự kiệnđếnBảng[WHEREđiều kiện]
    Làm [cũng | Thay tỷ lệ kèo bóng đá tối nayo đó] không có gì |lệnh| (lệnh;lệnh...)

Trong tâm trí. Trong phần sau,Cập nhật tỷ lệ kèo bóng đá tối naycó nghĩa là các tỷ lệ kèo bóng đá tối nay được xác định trêntỷ lệ kèo bóng đá tối nay, Cập tỷ lệ kèo bóng đá tối nayhoặcXóa.

Cập nhật các tỷ lệ kèo bóng đá tối nay được áp dụng bởi hệ thống tỷ lệ kèo bóng đá tối nay khi mối quan hệ kết quả và loại lệnh của cây truy vấn bằng với đối tượng và sự kiện được đưa ra trongTạo tỷ lệ kèo bóng đá tối nay12397_12533Không có gìTừ khóa), một hoặc nhiều hành động. Để đơn giản hóa, chúng tôi sẽ xem xét một tỷ lệ kèo bóng đá tối nay với một hành động. tỷ lệ kèo bóng đá tối nay này có thể có trình độ hoặc không và nó có thể làThay tỷ lệ kèo bóng đá tối nayo đóhoặccũng(mặc định).

Trình độ tỷ lệ kèo bóng đá tối nay là gì? Đó là một hạn chế cho biết khi nào các hành động của tỷ lệ kèo bóng đá tối nay nên được thực hiện và khi không. Trình độ này chỉ có thể tham khảo các giả thuyếtmớivà/hoặc, về cơ bản đại diện cho mối quan hệ được đưa ra dưới dạng đối tượng (nhưng với một ý nghĩa đặc biệt).

Vì vậy, chúng tôi có ba trường hợp tạo ra các cây truy vấn sau đây cho tỷ lệ kèo bóng đá tối nay một hành động.

Không có trình độ, vớicũnghoặcThay tỷ lệ kèo bóng đá tối nayo đó

Cây truy vấn từ hành động tỷ lệ kèo bóng đá tối nay với trình độ của cây truy vấn ban đầu được thêm vào

Trình độ chuyên môn đã cho vàcũng

Cây truy vấn từ hành động tỷ lệ kèo bóng đá tối nay với trình độ tỷ lệ kèo bóng đá tối nay và trình độ của cây truy vấn ban đầu được thêm vào

Trình độ chuyên môn đã cho vàThay tỷ lệ kèo bóng đá tối nayo đó

Cây truy vấn từ hành động tỷ lệ kèo bóng đá tối nay với trình độ tỷ lệ kèo bóng đá tối nay và trình độ của cây truy vấn ban đầu; và cây truy vấn ban đầu với trình độ tỷ lệ kèo bóng đá tối nay phủ định được thêm vào

Cuối cùng, nếu tỷ lệ kèo bóng đá tối nay làcũng, cây truy vấn gốc không thay đổi được thêm tỷ lệ kèo bóng đá tối nayo danh sách. Vì chỉ đủ điều kiệnThay tỷ lệ kèo bóng đá tối nayo đó14111_14236

chotrên tỷ lệ kèo bóng đá tối naytỷ lệ kèo bóng đá tối nay, truy vấn ban đầu (nếu không bị đàn áp bởiThay tỷ lệ kèo bóng đá tối nayo đó) được thực hiện trước khi có bất kỳ hành động nào được thêm vào các tỷ lệ kèo bóng đá tối nay. Điều này cho phép các hành động nhìn thấy (các) hàng được chèn. Nếu không cótrên bản cập tỷ lệ kèo bóng đá tối naytrên xóatỷ lệ kèo bóng đá tối nay, truy vấn ban đầu được thực hiện sau khi các hành động được thêm vào các tỷ lệ kèo bóng đá tối nay. Điều này đảm bảo rằng các hành động có thể nhìn thấy các hàng được cập nhật hoặc bị xóa; Nếu không, các hành động có thể không làm gì vì họ không tìm thấy hàng nào phù hợp với trình độ của họ.

Các cây truy vấn được tạo từ các hành động tỷ lệ kèo bóng đá tối nay được ném vào hệ thống viết lại một lần nữa và có thể nhiều tỷ lệ kèo bóng đá tối nay được áp dụng dẫn đến nhiều hoặc ít hơn các cây truy vấn. Vì vậy, các hành động của một tỷ lệ kèo bóng đá tối nay phải có một loại lệnh khác hoặc một mối quan hệ kết quả khác với chính tỷ lệ kèo bóng đá tối nay, nếu không, quá trình đệ quy này sẽ kết thúc trong một vòng lặp vô hạn. (Sự mở rộng đệ quy của một tỷ lệ kèo bóng đá tối nay sẽ được phát hiện và báo cáo là một lỗi.)

Các cây truy vấn được tìm thấy trong các hành động củaPG_REWRITEDanh mục hệ thống chỉ là mẫu. Vì chúng có thể tham chiếu các mục nhập bảng phạm vi chonew, Một số thay thế phải được thực hiện trước khi chúng có thể được sử dụng. Đối với bất kỳ tham chiếu nào đếnmới, Danh sách mục tiêu của truy vấn gốc được tìm kiếm cho một mục tương ứng. Nếu được tìm thấy, biểu thức của mục đó thay thế tham chiếu. Nếu không thì,newcó nghĩa giống như(cho mộtCập tỷ lệ kèo bóng đá tối nay) hoặc được thay thế bằng giá trị null (cho mộttỷ lệ kèo bóng đá tối nay). Bất kỳ tham chiếu nào đếnđược thay thế bằng tham chiếu đến mục nhập bảng phạm vi là mối quan hệ kết quả.

Sau khi hệ thống hoàn thành áp dụng các tỷ lệ kèo bóng đá tối nay cập nhật, nó áp dụng các tỷ lệ kèo bóng đá tối nay xem cho (các) cây truy vấn được sản xuất. Các chế độ xem không thể chèn các hành động cập nhật mới để không cần áp dụng các tỷ lệ kèo bóng đá tối nay cập nhật cho đầu ra viết lại xem.

38.4.1.1. tỷ lệ kèo bóng đá tối nay đầu tiên từng bước

Nói rằng chúng tôi muốn theo dõi các thay đổi đối vớiSL_AVAILCột trongShoelace_dataMối quan hệ. Vì vậy, chúng tôi thiết lập một bảng nhật ký và một tỷ lệ kèo bóng đá tối nay ghi có điều kiện một mục nhập nhật ký khi mộtCập tỷ lệ kèo bóng đá tối nayđược thực hiện trênShoelace_data.

16706_17303

Bây giờ ai đó làm:

Cập tỷ lệ kèo bóng đá tối nay Shoelace_Data SET SL_AVAIL = 6 WHER

Và chúng tôi nhìn tỷ lệ kèo bóng đá tối nayo bảng nhật ký:

Chọn * từ Shoelace_log;

 SL_NAME | SL_AVAIL | log_who | log_when                        
---------+----------+---------+------------------------------------------
 SL7 |        6 | Al | Tue ngày 20 tháng 10 16:14:45 1998 đã gặp DST
(1 hàng)

Đó là những gì chúng tôi mong đợi. Những gì đã xảy ra trong nền là như sau. Trình phân tích cú pháp đã tạo cây truy vấn:

Cập tỷ lệ kèo bóng đá tối nay Shoelace_Data SET SL_AVAIL = 6
  Từ Shoelace_Data Shoelace_Data
 WHERE SHOELACE_DATA.SL_NAME = 'SL7';

Có một tỷ lệ kèo bóng đá tối naylog_shoelaceđó làtrên bản cập tỷ lệ kèo bóng đá tối nayVới biểu thức trình độ tỷ lệ kèo bóng đá tối nay:

new.sl_avail < cũ.SL_AVAIL

và hành động:

Chèn tỷ lệ kèo bóng đá tối nayo giá trị Shoelace_log (
       new.sl_name, new.sl_avail,
       current_user, current_timestamp)
  Từ shoelace_data mới, shoelace_data cũ;

(Điều này có vẻ hơi lạ vì bạn thường không thể viếttỷ lệ kèo bóng đá tối nay ... giá trị ... từ. Thetừmệnh đề ở đây chỉ để chỉ ra rằng có các mục trong bảng trong cây truy vấn chomới18719_18791tỷ lệ kèo bóng đá tối nayCây truy vấn của lệnh.)

tỷ lệ kèo bóng đá tối nay là đủ điều kiệncũng18904_19133

Chèn tỷ lệ kèo bóng đá tối nayo giá trị Shoelace_log (
       new.sl_name, new.sl_avail,
       current_user, current_timestamp)
  Từ shoelace_data mới, shoelace_data cũ,shoelace_data shoelace_data;

Trong bước 2, trình độ tỷ lệ kèo bóng đá tối nay được thêm vào nó, do đó tập kết quả bị giới hạn ở các hàng trong đóSL_AVAILThay đổi:

Chèn tỷ lệ kèo bóng đá tối nayo giá trị Shoelace_log (
       new.sl_name, new.sl_avail,
       current_user, current_timestamp)
  Từ shoelace_data mới, shoelace_data cũ,
       Shoelace_data Shoelace_DataWHERE new.sl_avail < cũ.SL_AVAIL;

(cái này trông thậm chí còn xa lạ, vìtỷ lệ kèo bóng đá tối nay ... Giá trịkhông cóở đâumệnh đề, nhưng người lập kế hoạch và thực thi sẽ không gặp khó khăn gì với nó. Họ cần hỗ trợ cùng một chức năng này chotỷ lệ kèo bóng đá tối nay ... Chọn.)

20130_20296

Chèn tỷ lệ kèo bóng đá tối nayo giá trị Shoelace_log (
       new.sl_name, new.sl_avail,
       current_user, current_timestamp)
  Từ shoelace_data mới, shoelace_data cũ,
       Shoelace_data Shoelace_Data
 WHERE MỚI.SL_AVAIL < cũ.SL_AVAILvà shoelace_data.sl_name = 'SL7';

Bước 4 thay thế các tham chiếu đếnmớibởi các mục nhập danh sách mục tiêu từ cây truy vấn ban đầu hoặc bởi các tham chiếu biến phù hợp từ mối quan hệ kết quả:

Chèn tỷ lệ kèo bóng đá tối nayo giá trị Shoelace_log (shoelace_data.sl_name, 620954_210866< cũ.SL_AVAIL
   Và shoelace_data.sl_name = 'SL7';

Bước 5 thay đổiTài liệu tham khảo tỷ lệ kèo bóng đá tối nayo kết quả Tài liệu tham khảo:

Chèn tỷ lệ kèo bóng đá tối nayo giá trị Shoelace_log (
       shoelace_data.sl_name, 6,
       current_user, current_timestamp)
  Từ shoelace_data mới, shoelace_data cũ,
       Shoelace_data Shoelace_Data
 Trong đó 6 <shoelace_data.sl_availvà shoelace_data.sl_name = 'SL7';

Đó là nó. Vì tỷ lệ kèo bóng đá tối nay là21648_21654, chúng tôi cũng xuất ra cây truy vấn ban đầu. Nói tóm lại, đầu ra từ hệ thống tỷ lệ kèo bóng đá tối nay là danh sách hai cây truy vấn tương ứng với các câu sau:

Chèn tỷ lệ kèo bóng đá tối nayo các giá trị Shoelace_log (
       shoelace_data.sl_name, 6,
       current_user, current_timestamp)
  Từ Shoelace_data
 WHERE 6 < shoelace_data.sl_avail
   Và shoelace_data.sl_name = 'SL7';

Cập nhật Shoelace_Data SET SL_AVAIL = 6
 Trong đó sl_name = 'SL7';

Chúng được thực hiện theo thứ tự này và đó chính xác là những gì tỷ lệ kèo bóng đá tối nay có nghĩa là làm.

Sự thay thế và trình độ bổ sung đảm bảo rằng, nếu truy vấn ban đầu sẽ là, giả sử:

Cập tỷ lệ kèo bóng đá tối nay Shoelace_Data SET SL_COLOR = 'Green'
 Trong đó sl_name = 'SL7';

Không có mục nhập nào sẽ được viết. Trong trường hợp đó, cây truy vấn ban đầu không chứa mục nhập danh sách mục tiêu choSL_AVAIL, vì vậynew.sl_availsẽ được thay thế bởishoelace_data.sl_avail. Do đó, lệnh bổ sung được tạo bởi tỷ lệ kèo bóng đá tối nay là:

Chèn tỷ lệ kèo bóng đá tối nayo giá trị Shoelace_log (
       shoelace_data.sl_name,shoelace_data.sl_avail22866_22939shoelace_data.sl_avail< shoelace_data.sl_avail
   Và shoelace_data.sl_name = 'SL7';

Và trình độ đó sẽ không bao giờ đúng.

Nó cũng sẽ hoạt động nếu truy vấn ban đầu sửa đổi nhiều hàng. Vì vậy, nếu ai đó ban hành lệnh:

Cập tỷ lệ kèo bóng đá tối nay Shoelace_Data SET SL_AVAIL = 0
 Trong đó sl_color = 'đen';

23317_23350SL1, SL2, SL3SL4). NhưngSL3đã cóSL_AVAIL = 0. Trong trường hợp này, trình độ truy vấn ban đầu là khác nhau và kết quả là cây truy vấn bổ sung:

Chèn tỷ lệ kèo bóng đá tối nayo Shoelace_log
Chọn Shoelace_Data.SL_NAME, 0,
       current_user, current_timestamp
  Từ Shoelace_data
 WHERE 0 < Shoelace_data.SL_AVAIL
   VÀshoelace_data.sl_color = 'đen';

Được tạo bởi tỷ lệ kèo bóng đá tối nay. Cây truy vấn này chắc chắn sẽ chèn ba mục nhật ký mới. Và điều đó hoàn toàn chính xác.

Ở đây chúng ta có thể thấy lý do tại sao điều quan trọng là cây truy vấn ban đầu được thực hiện cuối cùng. NếuCập tỷ lệ kèo bóng đá tối nayđã được thực thi trước, tất cả các hàng đã được đặt thành 0, vì vậy việc đăng nhậptỷ lệ kèo bóng đá tối naysẽ không tìm thấy bất kỳ hàng nào trong đó0 < shoelace_data.sl_avail.

38.4.2. Hợp tác với quan điểm

Một cách đơn giản để bảo vệ quan hệ xem khỏi khả năng được đề cập là ai đó có thể cố gắng chạytỷ lệ kèo bóng đá tối nay, Cập tỷ lệ kèo bóng đá tối nayhoặcXóaTrên đó là để những cây truy vấn đó bị vứt bỏ. Vì vậy, chúng tôi có thể tạo các tỷ lệ kèo bóng đá tối nay:

Tạo tỷ lệ kèo bóng đá tối nay giày_ins_protect như khi chèn vào giày
    Thay vào đó không có gì;
Tạo tỷ lệ kèo bóng đá tối nay giày_upd_protect như trên cập nhật cho giày
    Thay vào đó không có gì;
Tạo tỷ lệ kèo bóng đá tối nay giày_del_protect như đang xóa để giày
    Thay vào đó không có gì;

Nếu ai đó hiện đang cố gắng thực hiện bất kỳ hoạt động nào trong quan hệ xemgiày, Hệ thống tỷ lệ kèo bóng đá tối nay sẽ áp dụng các tỷ lệ kèo bóng đá tối nay này. Vì các tỷ lệ kèo bóng đá tối nay không có hành động và làThay tỷ lệ kèo bóng đá tối nayo đó, Danh sách kết quả của các cây truy vấn sẽ trống và toàn bộ truy vấn sẽ không còn gì vì không còn gì để được tối ưu hóa hoặc thực thi sau khi hệ thống tỷ lệ kèo bóng đá tối nay được thực hiện với nó.

Một cách tinh vi hơn để sử dụng hệ thống tỷ lệ kèo bóng đá tối nay là tạo các tỷ lệ kèo bóng đá tối nay viết lại cây truy vấn thành một hoạt động đúng trên các bảng thực. Để làm điều đó trênShoelaceXem, chúng tôi tạo các tỷ lệ kèo bóng đá tối nay sau:

Tạo tỷ lệ kèo bóng đá tối nay shoelace_ins như khi chèn vào dây giày
    Làm thay thế
    Chèn vào giá trị Shoelace_Data (
           New.sl_name,
           New.sl_avail,
           New.sl_color,
           New.sl_len,
           Mới.sl_unit
    );

Tạo tỷ lệ kèo bóng đá tối nay shoelace_upd như trên bản cập nhật lên Shoelace
    Làm thay thế
    Cập nhật shoelace_data
       Đặt sl_name = new.sl_name,
           sl_avail = new.sl_avail,
           sl_color = new.sl_color,
           sl_len = new.sl_len,
           sl_unit = new.sl_unit
     Trong đó sl_name = old.sl_name;

Tạo tỷ lệ kèo bóng đá tối nay shoelace_del như đang xóa để đóng giày
    Làm thay thế
    Xóa khỏi Shoelace_Data
     WHERE SL_NAME = Old.SL_NAME;

Nếu bạn muốn hỗ trợTrở vềTruy vấn trên chế độ xem, bạn cần thực hiện các tỷ lệ kèo bóng đá tối nay bao gồmTrở vềCác mệnh đề tính toán các hàng xem. Điều này thường khá tầm thường cho các chế độ xem trên một bảng, nhưng nó hơi tẻ nhạt cho các chế độ xem tham gia nhưShoelace. Một ví dụ cho trường hợp tỷ lệ kèo bóng đá tối nay là:

Tạo tỷ lệ kèo bóng đá tối nay shoelace_ins như khi chèn vào dây giày
    Làm thay thế
    Chèn vào giá trị Shoelace_Data (
           New.sl_name,
           New.sl_avail,
           New.sl_color,
           New.sl_len,
           Mới.sl_unit
    )
    Trở lại
           Shoelace_data.*,
           (Chọn Shoelace_Data.SL_LEN * U.UN_FACT
            Từ đơn vị u nơi shoelace_data.sl_unit = U.un_name);

27227_27267tỷ lệ kèo bóng đá tối naytỷ lệ kèo bóng đá tối nay trả vềTruy vấn trên chế độ xem - TheTrở vềmệnh đề chỉ đơn giản là bỏ qua chotỷ lệ kèo bóng đá tối nay.

Bây giờ hãy giả sử rằng thỉnh thoảng, một gói dây giày đến cửa hàng và một danh sách các bộ phận lớn cùng với nó. Nhưng bạn không muốn cập tỷ lệ kèo bóng đá tối nay thủ côngShoelaceXem mỗi lần. Thay tỷ lệ kèo bóng đá tối nayo đó, chúng tôi thiết lập hai bảng nhỏ: một trong đó bạn có thể chèn các mục từ danh sách bộ phận và một bảng có thủ thuật đặc biệt. Các lệnh tạo cho chúng là:

Tạo bảng Shoelace_arrive (
    văn bản arr_name,
    ARR_QUANT Số nguyên
);

Tạo bảng Shoelace_ok (
    văn bản ok_name,
    OK_Quant Integer
);

Tạo tỷ lệ kèo bóng đá tối nay shoelace_ok_ins như khi chèn vào shoelace_ok
    Làm thay thế
    Cập nhật Shoelace
       Đặt SL_AVAIL = SL_AVAIL + MỚI.OK_QUANT
     Trong đó sl_name = new.ok_name;

Bây giờ bạn có thể điền tỷ lệ kèo bóng đá tối nayo bảngShoelace_arriveVới dữ liệu từ danh sách các bộ phận:

Chọn * từ Shoelace_arrive;

 ARR_NAME | ARR_QUANT
----------+-----------
 SL3 |        10
 SL6 |        20
 SL8 |        20
(3 hàng)

Hãy xem nhanh dữ liệu hiện tại:

28570_29236

Bây giờ di chuyển dây giày đã đến trong:

29311_29367

và kiểm tra kết quả:

Chọn * từ thứ tự Shoelace bằng SL_NAME;

 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 |        6 | Màu nâu |     60 | cm |        60
 SL4 |        8 | Đen |     40 | inch |     101.6
 SL3 |       10 | Đen |     35 | inch |      88.9
 SL8 |       21 | Màu nâu |     40 | inch |     101.6
 SL5 |        4 | Màu nâu |      1 | m |       100
 SL6 |       20 | Màu nâu |    0,9 | m |        90
(8 hàng)

Chọn * từ Shoelace_log;

 SL_NAME | SL_AVAIL | log_who | log_when                        
---------+----------+--------+------------------------------------------
 SL7 |        6 | Al | Tue ngày 20 tháng 10 19:14:45 1998 đã gặp DST
 SL3 |       10 | Al | Tue 20 tháng 10 19:25:16 1998 đã gặp DST
 SL6 |       20 | Al | Tue 20 tháng 10 19:25:16 1998 đã gặp DST
 SL8 |       21 | Al | Tue 20 tháng 10 19:25:16 1998 đã gặp DST
(4 hàng)

30545_30576tỷ lệ kèo bóng đá tối nay ... Chọnvới những kết quả này. Và mô tả về chuyển đổi cây truy vấn sẽ là lần cuối cùng trong chương này. Đầu tiên, có đầu ra của trình phân tích cú pháp:

30791_30940

Bây giờ là tỷ lệ kèo bóng đá tối nay đầu tiênShoelace_ok_insđược áp dụng và biến điều này thành:

Cập tỷ lệ kèo bóng đá tối nay Shoelace
   Đặt SL_AVAIL = Shoelace.SL_AVAIL + SHOELACE_ARRIVE.ARR_QUANT
  Từ shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok,
       Shoelace_ok cũ, Shoelace_ok Mới,
       dây giày
 WHERE Shoelace.SL_NAME = shoelace_arrive.arr_name;

và ném đi bản gốctỷ lệ kèo bóng đá tối naytrênShoelace_ok. Truy vấn viết lại này được chuyển đến hệ thống tỷ lệ kèo bóng đá tối nay một lần nữa và tỷ lệ kèo bóng đá tối nay được áp dụng thứ haiShoelace_updSản xuất:

Cập tỷ lệ kèo bóng đá tối nay Shoelace_Data
   Đặt SL_NAME = Shoelace.SL_NAME,
       sl_avail = shoelace.sl_avail + shoelace_arrive.arr_quant,
       sl_color = shoelace.sl_color,
       sl_len = shoelace.sl_len,
       sl_unit = shoelace.sl_unit
  Từ shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok,
       Shoelace_ok cũ, Shoelace_ok Mới,
       dây giày, dây giày cũ,
       Shoelace Mới, Shoelace_Data Shoelace_Data
 WHERE Shoelace.SL_name = shoelace_arrive.arr_name
   Và shoelace_data.sl_name = shoelace.sl_name;

Một lần nữa đó làThay tỷ lệ kèo bóng đá tối nayo đótỷ lệ kèo bóng đá tối nay và cây truy vấn trước đó bị vứt bỏ. Lưu ý rằng truy vấn này vẫn sử dụng chế độ xemShoelace. Nhưng hệ thống tỷ lệ kèo bóng đá tối nay chưa kết thúc với bước này, vì vậy nó tiếp tục và áp dụng_return32423_32449

Cập tỷ lệ kèo bóng đá tối nay shoelace_data
   Đặt SL_NAME = S.SL_NAME,
       SL_AVAIL = S.SL_AVAIL + SHOELACE_ARRIVE.ARR_QUANT,
       sl_color = s.sl_color,
       sl_len = s.sl_len,
       sl_unit = s.sl_unit
  Từ shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok,
       Shoelace_ok cũ, Shoelace_ok Mới,
       dây giày, dây giày cũ,
       Shoelace Mới, Shoelace_Data Shoelace_Data,
       dây giày cũ, dây giày mới,
       shoelace_data s, đơn vị u
 WHERE S.SL_NAME = shoelace_arrive.arr_name
   Và shoelace_data.sl_name = s.sl_name;

Cuối cùng, tỷ lệ kèo bóng đá tối naylog_shoelaceĐược áp dụng, sản xuất cây truy vấn thêm:

Chèn tỷ lệ kèo bóng đá tối nayo Shoelace_log
Chọn S.SL_NAME,
       s.sl_avail + shoelace_arrive.arr_quant,
       current_user,
       current_timestamp
  Từ shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok,
       Shoelace_ok cũ, Shoelace_ok Mới,
       dây giày, dây giày cũ,
       Shoelace Mới, Shoelace_Data Shoelace_Data,
       dây giày cũ, dây giày mới,
       shoelace_data s, đơn vị u,
       shoelace_data cũ, shoelace_data mới
       Shoelace_log Shoelace_log
 WHERE S.SL_NAME = shoelace_arrive.arr_name
   Và shoelace_data.sl_name = s.sl_name
   Và (s.sl_avail + shoelace_arrive.arr_quant) < s.sl_avail;

33800_33885

Vì vậy, chúng tôi kết thúc với hai cây truy vấn cuối cùng tương đương vớiSQLCâu lệnh:

Chèn tỷ lệ kèo bóng đá tối nayo Shoelace_log
Chọn S.SL_NAME,
       s.sl_avail + shoelace_arrive.arr_quant,
       current_user,
       current_timestamp
  Từ shoelace_arrive shoelace_arrive, shoelace_data shoelace_data,
       Shoelace_data s
 WHERE S.SL_NAME = shoelace_arrive.arr_name
   Và shoelace_data.sl_name = s.sl_name
   Và S.SL_AVAIL + SHOELACE_ARRIVE.ARR_QUANT < S.SL_AVAIL;

Cập nhật shoelace_data
   Đặt sl_avail = shoelace_data.sl_avail + shoelace_arrive.arr_quant
  Từ shoelace_arrive shoelace_arrive,
       shoelace_data shoelace_data,
       Shoelace_data s
 WHERE S.SL_NAME = shoelace_arrive.sl_name
   Và shoelace_data.sl_name = s.sl_name;

34705_34915

34921_35017Shoelace_dataMối quan hệ xuất hiện hai lần trong bảng phạm vi nơi nó chắc chắn có thể được giảm xuống còn một. Người lập kế hoạch không xử lý nó và do đó, kế hoạch thực thi cho đầu ra hệ thống tỷ lệ kèo bóng đá tối nay củatỷ lệ kèo bóng đá tối naysẽ là

Vòng lặp lồng nhau
  - Hợp nhất tham gia
        - SEQ SCAN
              - Sắp xếp
                    - seq scan trên s
        - SEQ SCAN
              - Sắp xếp
                    - SEQ SCAN trên Shoelace_arrive
  - SEQ SCAN trên Shoelace_Data

Trong khi bỏ qua mục nhập bảng phạm vi bổ sung sẽ dẫn đến A

Hợp nhất tham gia
  - SEQ SCAN
        - Sắp xếp
              - seq scan trên s
  - SEQ SCAN
        - Sắp xếp
              - SEQ SCAN trên shoelace_arrive

tạo ra chính xác các mục tương tự trong bảng nhật ký. Do đó, hệ thống tỷ lệ kèo bóng đá tối nay gây ra một lần quét thêm trên bảngShoelace_dataĐiều đó hoàn toàn không cần thiết. Và quá trình quét dự phòng tương tự được thực hiện một lần nữa trongCập tỷ lệ kèo bóng đá tối nay. Nhưng đó là một công việc thực sự khó khăn để làm cho tất cả có thể.

Bây giờ chúng tôi thực hiện một cuộc biểu tình cuối cùng củaPostgreSQLHệ thống tỷ lệ kèo bóng đá tối nay và sức mạnh của nó. Giả sử bạn thêm một số dây giày với màu sắc phi thường vào cơ sở dữ liệu của bạn:

Chèn tỷ lệ kèo bóng đá tối nayo các giá trị Shoelace ('SL9', 0, 'hồng', 35.0, 'inch', 0,0);
Chèn tỷ lệ kèo bóng đá tối nayo các giá trị Shoelace ('SL10', 1000, 'Magenta', 40.0, 'inch', 0.0);

Chúng tôi muốn xem để kiểm tra xemShoelaceMục nhập không phù hợp với bất kỳ màu giày nào. Chế độ xem cho điều này là:

Tạo xem shoelace_mismatch AS
    Chọn * Từ dây giày nơi không tồn tại
        (Chọn Shoename từ giày WHER

Đầu ra của nó là:

Chọn * từ Shoelace_mismatch;

 SL_NAME | SL_AVAIL | SL_COLOR | SL_LEN | SL_Unit | SL_LEN_CM
---------+----------+----------+--------+----------+-----------
 SL9 |        0 | Màu hồng |     35 | inch |      88.9
 SL10 |     1000 | Magenta |     40 | inch |     101.6

Bây giờ chúng tôi muốn thiết lập nó để các dây giày không phù hợp không có trong kho bị xóa khỏi cơ sở dữ liệu. Để làm cho nó khó hơn một chút choPOSTGRESQL, chúng tôi không xóa trực tiếp. Thay tỷ lệ kèo bóng đá tối nayo đó chúng tôi tạo thêm một chế độ xem:

Tạo xem shoelace_can_delete là
    Chọn * Từ Shoelace_Mismatch WHERE SL_AVAIL = 0;

và làm theo cách này:

Xóa khỏi dây giày nơi tồn tại
    (Chọn * Từ Shoelace_Can_Delete
             Trong đó sl_name = shoelace.sl_name);

Voilà:

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 |        6 | Màu nâu |     60 | cm |        60
 SL4 |        8 | Đen |     40 | inch |     101.6
 SL3 |       10 | Đen |     35 | inch |      88.9
 SL8 |       21 | Màu nâu |     40 | inch |     101.6
 SL10 |     1000 | Magenta |     40 | inch |     101.6
 SL5 |        4 | Màu nâu |      1 | m |       100
 SL6 |       20 | Màu nâu |    0,9 | m |        90
(9 hàng)

AXóaVề chế độ xem, với trình độ trình độ con mà trong tổng số sử dụng 4 chế độ xem làm tổ/tham gia, trong đó một trong số chúng có trình độ truy vấn con có chứa chế độ xem và trong đó các cột xem được tính toán được sử dụng, được viết lại thành một cây truy vấn duy nhất xóa dữ liệu được yêu cầu từ bảng thực.

Có lẽ chỉ có một tỷ lệ kèo bóng đá tối nayi tình huống trong thế giới thực nơi cần thiết như một cấu trúc như vậy. Nhưng nó làm cho bạn cảm thấy thoải mái khi nó hoạt động.