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 / 7.3

5.15. Theo dõi phụ kèo bóng đá pháp#

Khi bạn tạo các cấu trúc cơ sở dữ liệu phức tạp liên quan đến nhiều bảng có các ràng buộc chính, chế độ xem, kích hoạt, chức năng, v.v ... Bạn hoàn toàn tạo ra một mạng phụ kèo bóng đá pháp giữa các đối tượng. Chẳng hạn, một bảng có ràng buộc khóa nước ngoài phụ kèo bóng đá pháp vào bảng mà nó tham khảo.

Để đảm bảo tính toàn vẹn của toàn bộ cấu trúc cơ sở dữ kèo bóng đá pháp,PostgreSQLĐảm bảo rằng bạn không thể bỏ các đối tượng mà các đối tượng khác vẫn phụ kèo bóng đá pháp vào. Ví dụ: cố gắng bỏ bảng sản phẩm chúng tôi đã xem xét trongPhần 5.5.5, với bảng đơn đặt hàng tùy kèo bóng đá pháp vào nó, sẽ dẫn đến một thông báo lỗi như thế này:

Sản phẩm Bàn thả;

Lỗi: Không thể bỏ các sản phẩm bảng vì các đối tượng khác phụ kèo bóng đá pháp vào nó
Chi tiết: Ràng buộc đơn hàng_product_no_fkey trên đơn đặt hàng phụ kèo bóng đá pháp vào sản phẩm bảng
Gợi ý: Sử dụng thả ... Cascade để thả các đối tượng phụ kèo bóng đá pháp quá.

Thông báo lỗi chứa một gợi ý hữu ích: Nếu bạn không muốn làm phiền tất cả các đối tượng phụ kèo bóng đá pháp, bạn có thể chạy:

DROP BẢNG SẢN PHẨM CASCADE;

Và tất cả các đối tượng phụ kèo bóng đá pháp sẽ bị xóa, cũng như bất kỳ đối tượng nào phụ kèo bóng đá pháp vào chúng, đệ quy. Trong trường hợp này, nó không xóa bảng đơn đặt hàng, nó chỉ loại bỏ các ràng buộc khóa nước ngoài. Nó dừng lại ở đó vì không có gì phụ kèo bóng đá pháp vào ràng buộc quan trọng của nước ngoài. (Nếu bạn muốn kiểm tra cái gìDrop ... Cascadesẽ làm, chạythảkhông cóCascadevà đọcchi tiếtđầu ra.)

Hầu như tất cảthảlệnh trongPostgreSQLHỗ trợ Chỉ địnhCascade. Tất nhiên, bản chất của các phụ kèo bóng đá pháp có thể thay đổi theo loại đối tượng. Bạn cũng có thể viếtHạn chếthay vìCascadeĐể có được hành vi mặc định, đó là để ngăn chặn các đối tượng mà bất kỳ đối tượng nào khác phụ kèo bóng đá pháp vào.

Lưu ý

kèo bóng đá pháp tiêu chuẩn SQL, chỉ địnhHạn chếhoặcCascadeđược yêu cầu trong Athảlệnh. Không có hệ thống cơ sở dữ kèo bóng đá pháp nào thực sự thực thi quy tắc đó, nhưng kèo bóng đá pháp hành vi mặc định làHạn chếhoặcCascadekhác nhau giữa các hệ thống.

Nếu ADropLệnh liệt kê nhiều đối tượng,Cascadechỉ được yêu cầu khi có các phụ kèo bóng đá pháp bên ngoài nhóm được chỉ định. Ví dụ, khi nóiTab Drop Tab1, Tab2Sự tồn tại của tham chiếu khóa nước ngoàiTab1từTAB2sẽ không có nghĩa làCascadelà cần thiết để thành công.

Đối với chức năng hoặc quy trình do người dùng xác địnhPostgreSQLTheo dõi các phụ kèo bóng đá pháp liên quan đến các kèo bóng đá pháp tính có thể nhìn nhận được của hàm, chẳng hạn như các loại đối số và kết quả của nó, nhưngkhôngSự phụ kèo bóng đá pháp chỉ có thể được biết đến bằng cách kiểm tra cơ thể chức năng. Ví dụ, hãy xem xét tình huống này:

Tạo loại cầu vồng dưới dạng enum ('đỏ', 'cam', 'vàng',
                             'Màu xanh lá cây', 'màu xanh', 'màu tím');

Tạo bảng my_colors (cầu vồng màu, văn bản ghi chú);

Tạo chức năng get_color_note (cầu vồng) trả về văn bản dưới dạng
  'Chọn Lưu ý từ my_colors trong đó màu = $ 1'
  Ngôn ngữ SQL;

(xemPhần 36.5Để giải thích các hàm ngôn ngữ SQL.)PostgreSQLsẽ biết rằngget_color_notechức năng phụ kèo bóng đá pháp vàoRainbowLoại: Thả loại sẽ buộc bỏ chức năng, vì loại đối số của nó sẽ không còn được xác định. NhưngPostgreSQLsẽ không xem xétget_color_noteđể phụ kèo bóng đá pháp vàomy_colorsBảng, và do đó sẽ không bỏ chức năng nếu bảng bị hủy. Mặc dù có những nhược điểm đối với phương pháp này, cũng có những lợi ích. Hàm vẫn còn hiệu lực kèo bóng đá pháp một số ý nghĩa nếu bảng bị thiếu, mặc dù việc thực thi nó sẽ gây ra lỗi; Tạo một bảng mới cùng tên sẽ cho phép chức năng hoạt động trở lại.

Mặt khác, đối với chức năng hoặc quy trình ngôn ngữ SQL có cơ thể được viết theo kiểu tiêu chuẩn SQL, cơ thể được phân tích cú pháp theo thời gian định nghĩa chức năng và tất cả các phụ kèo bóng đá pháp được phân tích viên công nhận. Do đó, nếu chúng ta viết hàm ở trên là

Tạo chức năng get_color_note (Rainbow) Trả về văn bản
Bắt đầu nguyên tử
  Chọn Lưu ý từ my_colors trong đó màu = $ 1;
KẾT THÚC;

Sau đó, sự phụ kèo bóng đá pháp của hàm vàomy_colorsBảng sẽ được biết đến và được thi hành bởithả.

Gửi hiệu chỉnh

Nếu bạn thấy bất cứ điều gì trong tài kèo bóng đá pháp không chính xác, không phù hợp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụngMẫu nàyĐể báo cáo vấn đề tài kèo bóng đá pháp.