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.10. Kế soi kèo bóng đá truoctran

PostgreSQLthực hiện kế soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran thành phố. Mỗi tiểu bang có nhiều thành phố, nhưng chỉ có một vốn.Madison |Bảng để nó kế soi kèo bóng đá truoctran từLas Vegas |:

Tạo các thành phố soi kèo bóng đá truoctran (

Trong trường hợp này,Madison |soi kèo bóng đá truoctrankế soi kèo bóng đá truoctranTất cả các cột của soi kèo bóng đá truoctran cha mẹ của nó,Las Vegas |. Madison | 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ế soi kèo bóng đá truoctran 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.

Chọn tên, độ cao

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

Tên | độ cao

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

Chọn tên, độ cao

ở đâ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ỳ soi kèo bóng đá truoctran nào bên dướiThành phốTrong hệ thống phân cấp kế soi kèo bóng đá truoctran. 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 soi kèo bóng đá truoctran bằng dấu vết*Để chỉ định rõ ràng rằng các soi kèo bóng đá truoctran hậu duệ được bao gồm:

Chọn tên, độ cao

Viết*không cần thiết, vì hành vi này luôn là mặc định. Tuy nhiên, cú pháp này vẫn được hỗ trợ để tương thích với soi kèo bóng đá truoctran bản phát hành cũ hơn trong đó mặc định có thể được thay đổi.

Trong một số trường hợp, bạn có thể muốn biết soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran có thể cho bạn biết soi kèo bóng đá truoctran gốc:

Chọn C.Tableoid, C.Name, C.elevation

Trở lại:

Tableoid |   độ cao |

(Nếu bạn cố gắng tái tạo ví dụ này, bạn có thể sẽ nhận được soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran thực tế:

Chọn p.relname, c.name, c.elevation

Trở lại:

Relname |   độ cao |

Một cách khác để có được hiệu ứng tương tự là sử dụngRegClassLoại bí danh, sẽ in soi kèo bóng đá truoctran oid một cách tượng trưng:

Chọn C.Tableoid :: RegClass, C.Name, C.elevation

Kế soi kèo bóng đá truoctran 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ế soi kèo bóng đá truoctran. Trong ví dụ của chúng tôi, sau đâyChènCâu lệnh sẽ thất bại:

Chèn vào soi kèo bóng đá truoctran thành phố (tên, dân số, độ cao, trạng thái)

Chúng tôi có thể hy vọng rằng dữ liệu bằng cách nào đó sẽ được chuyển đếnMadison |soi kèo bóng đá truoctran, nhưng điều này không xảy ra:ChènLuôn chèn vào chính xác soi kèo bóng đá truoctran đượ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 41). Tuy nhiên, điều đó không giúp ích gì cho trường hợp trên vìLas Vegas |soi kèo bóng đá truoctran 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.

16373_16528Không kế soi kèo bóng đá truoctranmệnh đề. 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ế soi kèo bóng đá truoctran.

Một bảng có thể kế soi kèo bóng đá truoctran 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.Mạnhhợp nhấtđể chỉ có một cột như vậy trong soi kèo bóng đá truoctran con. Để được hợp nhất, các cột phải có cùng loại dữ liệu, nếu không một lỗi được nêu ra.

Kế soi kèo bóng đá truoctran bảng thường được thiết lập khi bảng con được tạo, sử dụngkế soi kèo bóng đá truoctranmệnh đề củaTạo soi kèo bóng đá truoctranTuyên bố. Ngoài ra, một soi kèo bóng đá truoctran đã đượ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ế soi kèo bóng đá truoctranBiến thể củasoi kèo bóng đá truoctran thay đổi. Để làm điều này, soi kèo bóng đá truoctran 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ẹ.Không kế soi kèo bóng đá truoctranBiến thể củaBẢNG ALTER. Việc thêm và loại bỏ các liên kết kế soi kèo bóng đá truoctran như thế này có thể hữu ích khi mối quan hệ kế soi kèo bóng đá truoctran đang được sử dụng để phân vùng bảng (xemPhần 5.11).

Một cách thuận tiện để tạo một soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran. Điều này tạo ra một soi kèo bóng đá truoctran mới với cùng các cột với soi kèo bóng đá truoctran nguồn.Kiểm traCác ràng buộc được xác định trên soi kèo bóng đá truoctran nguồn,bao gồm soi kèo bóng đá truoctran ràng buộcTùy chọn chonhưnên được chỉ định, vì đứa trẻ mới phải có soi kèo bóng đá truoctran ràng buộc phù hợp với cha mẹ để được coi là tương thích.

Một bảng 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ế soi kèo bóng đá truoctran từ bất kỳ bảng cha mẹ nào.CascadeTùy chọn (xemPhần 5.14).

soi kèo bóng đá truoctran 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ế soi kèo bóng đá truoctran. 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.BẢNG ALTERtuân theo soi kèo bóng đá truoctran quy tắc tương tự cho việc hợp nhất cột trùng lặp và từ chối áp dụng trongTạo soi kèo bóng đá truoctran.

Các truy vấn được kế soi kèo bóng đá truoctran chỉ thực hiện kiểm tra quyền truy cập trên bảng cha mẹ. Vì vậy, ví dụ, cấpCập nhậtquyền trênLas Vegas |soi kèo bóng đá truoctran ngụ ý quyền cập nhật các hàng trongMadison |soi kèo bóng đá truoctran, khi chúng được truy cập quaThành phố. Điều này bảo tồn sự xuất hiện mà dữ liệu là (cũng) trong soi kèo bóng đá truoctran cha.Madison |soi kèo bóng đá truoctran không thể được cập nhật trực tiếp mà không có khoản trợ cấp bổ sung. Theo cách tương tự, các chính sách bảo mật hàng của soi kèo bóng đá truoctran cha mẹ (xemPhần 5.8) được áp dụng cho các hàng đến từ các bảng con trong một truy vấn được kế soi kèo bóng đá truoctran. Các chính sách của một bảng trẻ, nếu có, chỉ được áp dụng khi nó được đặt tên rõ ràng trong truy vấn;

soi kèo bóng đá truoctran nước ngoài (xemPhần 5.12) cũng có thể là một phần của hệ thống phân cấp kế soi kèo bóng đá truoctran, như các bảng cha hoặc con, giống như các bảng thông thường có thể. Nếu một bàn nước ngoài là một phần của hệ thống phân cấp kế soi kèo bóng đá truoctran thì bất kỳ hoạt động nào không được hỗ trợ bởi Bàn nước ngoài cũng không được hỗ trợ trên toàn bộ hệ thống phân cấp.

5.10.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ể hoạt động theo phân cấp kế soi kèo bóng đá truoctran. 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 soi kèo bóng đá truoctran biến thể củaBẢNG ALTER, nhưng khôngChènhoặcsoi kèo bóng đá truoctran thay đổi ... Đổi tên) Thông thường mặc định bao gồm các soi kèo bóng đá truoctran con và hỗ trợchỉKý hiệu để loại trừ chúng. soi kèo bóng đá truoctran 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ế soi kèo bóng đá truoctran. 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ó (SQL Lệnh).

Một giới hạn nghiêm trọng của tính năng kế soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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.

  • Nếu chúng ta khai báoLas Vegas |.tênTo Beđộc đáohoặc AKhóa chính, Điều này sẽ không dừngMadison |soi kèo bóng đá truoctran từ việc có các hàng có tên sao chép các hàng trongLas Vegas |. Và những hàng trùng lặp đó theo mặc định sẽ hiển thị trong soi kèo bóng đá truoctran truy vấn từThành phố. Trên thực tế, theo mặc địnhMadison |hoàn toàn không có ràng buộc duy nhất nào, 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àoMadison |, 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ố soi kèo bóng đá truoctran khác, ràng buộc này sẽ không tự động tuyên truyền đếnMadison |. 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 vớiThủ đô.

  • Chỉ định rằng cột của một soi kèo bóng đá truoctran khácTài liệu tham khảo Las Vegas | (độ cao)sẽ cho phép soi kèo bóng đá truoctran 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.

Một số chức năng không được triển khai cho hệ thống phân cấp kế soi kèo bóng đá truoctran được triển khai để phân vùng khai báo. Chăm sóc đáng kể là cần thiết để quyết định xem việc phân vùng với kế soi kèo bóng đá truoctran kế soi kèo bóng đá truoctran có hữu ích cho ứng dụng của bạn hay không.

Gửi hiệu chỉnh

Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không khớpMẫu nàyĐể báo cáo vấn đề tài liệu.