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
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 xem cùng một trang chohiện tạiPhiên bản hoặc một trong cách đọc kèo bóng đá phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

5,8. Kế cách đọc kèo bóng đá

PostgreSQLthực hiện kế cách đọc kèo bóng đá bảng, có thể là một công cụ hữu ích cho các nhà thiết kế cơ sở dữ liệu. .

Hãy bắt đầu với một ví dụ: Giả sử chúng ta đang cố gắng xây dựng một mô hình dữ liệu cho các thành phố. Mỗi tiểu bang có nhiều thành phố, nhưng chỉ có một vốn. Chúng tôi muốn có thể nhanh chóng lấy lại thành phố thủ đô cho bất kỳ tiểu bang cụ thể nào. Điều này có thể được thực hiện bằng cách tạo hai bảng, một cho thủ đô nhà nước và một cho các thành phố không phải là thủ đô. Tuy nhiên, điều gì xảy ra khi chúng tôi muốn hỏi dữ liệu về một thành phố, bất kể đó có phải là vốn hay không? Tính năng kế cách đọc kèo bóng đá có thể giúp giải quyết vấn đề này. Chúng tôi xác địnhThủ đôBảng để nó kế cách đọc kèo bóng đá từThành phố:

Tạo các thành phố bảng (
    tên văn bản,
    Dân số nổi,
    độ cao int - tính bằng chân
);

Tạo bảng xếp hạng (
    Nhà nước Char (2)
) Kế cách đọc kèo bóng đá (thành phố);

Trong trường hợp này,Thủ đôcách đọc kèo bóng đákế cách đọc kèo bóng đáTất cả cách đọc kèo bóng đá cột của bảng cha mẹ của nó,Thành phố. Thủ đô trạng thái cũng có một cột phụ,Bang, hiển thị trạng thái của họ.

inPostgreSQL, một bảng có thể kế cách đọc kèo bóng đá từ số 0 hoặc nhiều bảng khác và truy vấn có thể tham chiếu tất cả các hàng của bảng hoặc tất cả các hàng của bảng cộng với tất cả các bảng hậu duệ của nó. Hành vi sau là mặc định. Ví dụ: truy vấn sau đây tìm thấy tên của tất cả các thành phố, bao gồm cả thủ đô trạng thái, nằm ở độ cao trên 500 feet:

Chọn tên, độ cao
    Từ cách đọc kèo bóng đá thành phố
    Nơi độ cao 500;

Cho dữ liệu mẫu từPostgreSQLHướng dẫn (xemPhần 2.1), Điều này trả về:

Tên | độ cao
-----------+----------
 Las Vegas |     2174
 Mariposa |     1953
 Madison |      845

Mặt khác, truy vấn sau đây tìm thấy tất cả cách đọc kèo bóng đá thành phố không phải là thủ đô trạng thái và nằm ở độ cao trên 500 feet:

Chọn tên, độ cao
    Chỉ từ cách đọc kèo bóng đá thành phố
    Trong đó độ cao 500;

   Tên | độ cao
-----------+----------
 Las Vegas |     2174
 Mariposa |     1953

ở đâychỉTừ khóa chỉ ra rằng truy vấn chỉ nên áp dụng choThành phố, và không phải bất kỳ cách đọc kèo bóng đá nào bên dướiThành phốTrong hệ thống phân cấp kế cách đọc kèo bóng đá. Nhiều lệnh mà chúng ta đã thảo luận -Chọn, Cập nhậtXóa- Hỗ trợchỉTừ khóa.

Bạn cũng có thể viết tên cách đọc kèo bóng đá bằng dấu vết*Để chỉ định rõ ràng rằng cách đọc kèo bóng đá bảng hậu duệ được bao gồm:

Chọn tên, độ cao
    Từ cách đọc kèo bóng đá thành phố*
    Nơi độ cao 500;

Viết*không cần thiết, vì hành vi này là mặc định (trừ khi bạn đã thay đổi cài đặt củaSQL_InheritanceTùy chọn cấu hình). Tuy nhiên viết*có thể hữu ích để nhấn mạnh rằng cách đọc kèo bóng đá bảng bổ sung sẽ được tìm kiếm.

Trong một số trường hợp, bạn có thể muốn biết cách đọc kèo bóng đá nào một hàng cụ thể bắt nguồn từ. Có một cột hệ thống được gọi làTableoidTrong mỗi cách đọc kèo bóng đá có thể cho bạn biết cách đọc kèo bóng đá gốc:

Chọn C.Tableoid, C.Name, C.altitude
Từ cách đọc kèo bóng đá thành phố c
Trong đó C.altitude 500;

Trở lại:

Tableoid |   Tên | độ cao
----------+-----------+----------
   139793 | Las Vegas |     2174
   139793 | Mariposa |     1953
   139798 | Madison |      845

(Nếu bạn cố gắng tái tạo ví dụ này, bạn có thể sẽ nhận được cách đọc kèo bóng đá OID số khác nhau.) Bằng cách thực hiện tham gia vớipg_ classBạn có thể thấy tên cách đọc kèo bóng đá thực tế:

Chọn p.relname, c.name, c.altitude
Từ cách đọc kèo bóng đá thành phố C, pg_class p
Trong đó C.altitude 500 và c.tableoid = p.oid;

Trở lại:

Relname |   Tên | độ cao
----------+-----------+----------
 Thành phố | Las Vegas |     2174
 Thành phố | Mariposa |     1953
 Thủ đô | Madison |      845

Kế cách đọc kèo bóng đá không tự động truyền dữ liệu từChènhoặcCopyCác lệnh cho các bảng khác trong phân cấp kế cách đọc kèo bóng đá. Trong ví dụ của chúng tôi, sau đâyChèncâu lệnh sẽ thất bại:

Chèn vào cách đọc kèo bóng đá thành phố (tên, dân số, độ cao, trạng thái)
Giá trị ('New York', null, null, 'ny');

Chúng tôi có thể hy vọng rằng dữ liệu bằng cách nào đó sẽ được chuyển đếnThủ đôcách đọc kèo bóng đá, nhưng điều này không xảy ra:ChènLuôn chèn vào chính xác cách đọc kèo bóng đá được chỉ định. Trong một số trường hợp, có thể chuyển hướng chèn bằng quy tắc (xemChương 38). Tuy nhiên, điều đó không giúp ích gì cho trường hợp trên vìThành phốcách đọc kèo bóng đá không chứa cộtBang, và do đó, lệnh sẽ bị từ chối trước khi có thể áp dụng quy tắc.

Tất cả các ràng buộc kiểm tra và các ràng buộc không có null trên bảng cha mẹ được con cái kế cách đọc kèo bóng đá tự động. Các loại ràng buộc khác (duy nhất, khóa chính và các ràng buộc khóa nước ngoài) không được kế cách đọc kèo bóng đá.

Một bảng có thể kế cách đọc kèo bóng đá từ nhiều bảng cha mẹ, trong trường hợp nó có sự kết hợp của các cột được xác định bởi các bảng cha. Bất kỳ cột nào được khai báo trong định nghĩa của bảng con đều được thêm vào những cột này. Nếu cùng một tên cột xuất hiện trong nhiều bảng cha mẹ hoặc trong cả bảng cha và định nghĩa của con, thì các cột này là"Hợp nhất"để chỉ có một cột như vậy trong bảng con. Để được hợp nhất, cách đọc kèo bóng đá cột phải có cùng loại dữ liệu, nếu không một lỗi được nêu ra. Cột được hợp nhất sẽ có cách đọc kèo bóng đá bản sao của tất cả cách đọc kèo bóng đá ràng buộc kiểm tra đến từ bất kỳ một trong cách đọc kèo bóng đá định nghĩa cột mà nó đến từ đó và sẽ được đánh dấu không phải

Kế cách đọc kèo bóng đá bảng thường được thiết lập khi bảng con được tạo, sử dụngkế cách đọc kèo bóng đámệnh đề củaPostgreSQL: Tài liệu:Tuyên bố. Ngoài ra, một cách đọc kèo bóng đá đã được xác định theo cách tương thích có thể có mối quan hệ cha mẹ mới, sử dụngkế cách đọc kèo bóng đáBiến thể củaBẢNG ALTER. Để làm điều này, bảng con mới phải bao gồm các cột có cùng tên và loại với các cột của cha mẹ. Nó cũng phải bao gồm các ràng buộc kiểm tra với cùng tên và kiểm tra các biểu thức như của cha mẹ. Tương tự, một liên kết kế cách đọc kèo bóng đá có thể được xóa khỏi một đứa trẻ bằng cách sử dụngKhông kế cách đọc kèo bóng đáBiến thể củacách đọc kèo bóng đá thay đổi. Việc thêm và loại bỏ các liên kết kế cách đọc kèo bóng đá như thế này có thể hữu ích khi mối quan hệ kế cách đọc kèo bóng đá đang được sử dụng để phân vùng bảng (xemPhần 5.9).

Một cách thuận tiện để tạo một cách đọc kèo bóng đá tương thích mà sau này sẽ được tạo ra một đứa trẻ mới là sử dụngnhưmệnh đề trongTạo cách đọc kèo bóng đá. Điều này tạo ra một bảng mới với cùng cách đọc kèo bóng đá cột với bảng nguồn. Nếu cóKiểm tracách đọc kèo bóng đá ràng buộc được xác định trên bảng nguồn,bao gồm cách đọc kèo bóng đá ràng buộctùy chọn chonhưnên được chỉ định, vì đứa trẻ mới phải có cách đọc kèo bóng đá ràng buộc phù hợp với cha mẹ để được coi là tương thích.

Bàn cha mẹ không thể bị loại bỏ trong khi bất kỳ con nào của nó vẫn còn. Không thể bỏ các cột hoặc kiểm tra các ràng buộc của các bảng con hoặc bị thay đổi nếu chúng được kế cách đọc kèo bóng đá từ bất kỳ bảng cha mẹ nào. Nếu bạn muốn xóa một bảng và tất cả các hậu duệ của nó, một cách dễ dàng là thả bảng cha mẹ bằngCascadeTùy chọn.

cách đọc kèo bóng đá thay đổisẽ tuyên truyền mọi thay đổi trong định nghĩa dữ liệu cột và kiểm tra các ràng buộc xuống hệ thống phân cấp kế cách đọc kèo bóng đá. Một lần nữa, các cột rơi phụ thuộc vào các bảng khác chỉ có thể khi sử dụngCascadeTùy chọn.cách đọc kèo bóng đá thay đổituân theo cách đọc kèo bóng đá quy tắc tương tự để hợp nhất cột trùng lặp và từ chối áp dụng trongTạo cách đọc kèo bóng đá.

Lưu ý cách xử lý quyền truy cập bảng. Truy vấn bảng cha có thể tự động truy cập dữ liệu trong cách đọc kèo bóng đá bảng con mà không cần truy cập thêm đặc quyền. Điều này bảo tồn sự xuất hiện mà dữ liệu là (cũng) trong bảng cha. Tuy nhiên, việc truy cập cách đọc kèo bóng đá bảng con trực tiếp là không được phép tự động và sẽ yêu cầu cách đọc kèo bóng đá đặc quyền tiếp theo được cấp. Hai ngoại lệ cho quy tắc này làcắt ngắncách đọc kèo bóng đá khóa, trong đó cách đọc kèo bóng đá quyền trên cách đọc kèo bóng đá bảng con luôn được kiểm tra, cho dù chúng được xử lý trực tiếp hay đệ quy thông qua cách đọc kèo bóng đá lệnh đó được thực hiện trên bảng cha.

5.8.1. Hãy cẩn thận

Lưu ý rằng không phải tất cả các lệnh SQL đều có thể làm việc theo phân cấp kế cách đọc kèo bóng đá. Các lệnh được sử dụng để truy vấn dữ liệu, sửa đổi dữ liệu hoặc sửa đổi lược đồ (ví dụ:Chọn, Cập nhật, Xóa, Hầu hết cách đọc kèo bóng đá biến thể củacách đọc kèo bóng đá thay đổi, nhưng khôngChènhoặccách đọc kèo bóng đá thay đổi ... Đổi tên) Thông thường mặc định bao gồm cách đọc kèo bóng đá bảng con và hỗ trợchỉKý hiệu để loại trừ chúng. cách đọc kèo bóng đá lệnh thực hiện bảo trì và điều chỉnh cơ sở dữ liệu (ví dụ:Reindex, Nút hút) Thông thường chỉ hoạt động trên các bảng cá nhân, vật lý và không hỗ trợ đệ quy trên các hệ thống phân cấp kế cách đọc kèo bóng đá. Hành vi tương ứng của mỗi lệnh riêng lẻ được ghi lại trong trang tham chiếu của nó (PostgreSQL: Tàicách đọc kèo bóng đá lệnh SQL).

Một giới hạn nghiêm trọng của tính năng kế cách đọc kèo bóng đá là các chỉ mục (bao gồm các ràng buộc duy nhất) và các ràng buộc khóa nước ngoài chỉ áp dụng cho các bảng đơn lẻ, không phải cho trẻ em cách đọc kèo bóng đá kế của chúng. Điều này đúng trên cả hai mặt tham chiếu và tham chiếu của một ràng buộc quan trọng nước ngoài. Do đó, trong các điều khoản của ví dụ trên:

  • Nếu chúng ta khai báoThành phố.tênTo Beđộc đáohoặc AKhóa chính, Điều này sẽ không dừngThủ đôBảng từ cách đọc kèo bóng đá hàng có tên sao chép cách đọc kèo bóng đá hàng trongThành phố. Và những hàng trùng lặp đó theo mặc định sẽ hiển thị trong cách đọc kèo bóng đá truy vấn từThành phố. Trên thực tế, theo mặc địnhThủ đôsẽ không có ràng buộc duy nhất nào cả, và do đó có thể chứa nhiều hàng có cùng tên. Bạn có thể thêm một ràng buộc duy nhất vàoThủ đô, nhưng điều này sẽ không ngăn chặn sự trùng lặp so vớiThành phố.

  • Tương tự, nếu chúng ta chỉ định rằngThành phố.tên Tài liệu tham khảoMột số cách đọc kèo bóng đá khác, ràng buộc này sẽ không tự động tuyên truyền đếnThủ đô. Trong trường hợp này, bạn có thể làm việc xung quanh nó bằng cách thêm thủ côngTài liệu tham khảoràng buộc đối vớiThủ đô.

  • Chỉ định rằng cột của một cách đọc kèo bóng đá khácTài liệu tham khảo thành phố (tên)sẽ cho phép cách đọc kèo bóng đá khác chứa tên thành phố, nhưng không phải tên vốn. Không có cách giải quyết tốt cho trường hợp này.

22281_22460