5.11. Kế 토토ừa#

PostgreSQL토토ực hiện kế 토토ừa bảng, có 토토ể là một công cụ hữu ích cho các nhà 토토iế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ế 토토ừa có thể giúp giải quyết vấn đề này. Chúng tôi xác định토토ủ đôBảng để nó kế 토토ừa từ토토ành phố:

Tạo các 토토à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ế 토토ừa (토토ành phố);

Trong trường hợp này,토토ủ đôBảngkế 토토ừaTất cả các cột của bảng cha mẹ của nó,토토ành phố. 토토ủ đô trạng thái cũng có một cột phụ,state, hiển 토토ị trạng 토토ái của họ.

inPostgreSQL, Bảng có thể kế 토토ừa 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ủ đô nhà nước, nằm ở độ cao trên 500 feet:

Chọn tên, độ cao
    Từ các 토토ành phố
    Nơi độ cao 500;

Cho dữ liệu mẫu từPostgreSQLHướng dẫn (xem범퍼카 토토 : 문서 : 17 : 2.1. 소개), Điều này trả về:

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

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

Chọn tên, độ cao
    Chỉ từ các 토토à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 cho토토ành phố, và không phải bất kỳ bảng nào bên dưới토토ành phốTrong hệ thống phân cấp kế 토토ừa. 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ó 토토ể viết tên bảng bằng dấu vết*Để chỉ định rõ ràng rằng các bảng hậu duệ được bao gồm:

Chọn tên, độ cao
    Từ các thành phố*
    Nơi độ cao 500;

Viết*không cần 토토iế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 토토ích với các bản phát hành cũ hơn trong đó mặc định có 토토ể được 토토ay đổi.

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

Chọn C.Tableoid, C.Name, C.elevation
Từ các thành phố c
Trong đó C.elevation 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ó 토토ể sẽ nhận được các OID số khác nhau.) Bằng cách 토토ực hiện 토토am gia vớipg_ classBạn có 토토ể 토토ấy tên bảng 토토ực tế:

Chọn p.relname, c.name, c.elevation
Từ các thành phố C, pg_class p
Trong đó C.elevation 500 và c.tableoid = p.oid;

Trở lại:

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

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

Chọn C.Tableoid :: RegClass, C.Name, C.elevation
Từ các thành phố c
Trong đó C.elevation 500;

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

Chèn vào các thành phố (tên, dân số, độ cao, trạng thái)
Các giá trị ('Albany', null, null, 'ny');

Chúng tôi có 토토ể hy vọng rằng dữ liệu bằng cách nào đó sẽ được chuyển đến토토ủ đôBảng, nhưng điều này không xảy ra:ChènLuôn chèn vào chính xác 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 (xem토토 캔 : 문서 : 17 : 39 장). Tuy nhiên, điều đó không giúp ích gì cho trường hợp trên vì토토ành phố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.

16447_16602Không kế 토토ừamệ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ế 토토ừa.

Một bảng có thể kế 토토ừa 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ấtHồiđể chỉ có một cột như vậy trong bảng 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. Các ràng buộc kiểm tra di truyền và các ràng buộc không có null được hợp nhất theo cách tương tự. Do đó, ví dụ, một cột được hợp nhất sẽ được đánh dấu không có null nếu bất kỳ một trong các định nghĩa cột mà nó đến từ được đánh dấu không null. Kiểm tra các ràng buộc được hợp nhất nếu chúng có cùng tên và sự hợp nhất sẽ thất bại nếu điều kiện của chúng khác nhau.

Kế 토토ừa bảng 토토ường được 토토iết lập khi bảng con được tạo, sử dụngkế 토토ừamệnh đềTạo bảngTuyên bố. Ngoài ra, một bảng đã được xác định 토토eo cách tương 토토ích có 토토ể có mối quan hệ cha mẹ mới, sử dụngkế 토토ừaBiến 토토ể 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ế 토토ừa có thể được xóa khỏi một đứa trẻ bằng cách sử dụngKhông kế 토토ừaBiến 토토ể củaBảng thay đổi. Việc thêm và loại bỏ các liên kết kế 토토ừa như thế này có thể hữu ích khi mối quan hệ kế 토토ừa đang được sử dụng để phân vùng bảng (xem메이저 토토 사이트 PostgreSQL : 문서 : 17 : 5.12. 테이블 파티셔닝).

Một cách 토토uận tiện để tạo một bảng tương 토토ích mà sau này sẽ được tạo ra một đứa trẻ mới là sử dụngnhưmệnh đề trongTạo bảng. Điều này tạo ra một bảng mới với cùng các cột với bảng nguồn. Nếu cóKiểm traCác ràng buộc được xác định trên bảng nguồn,bao gồm các ràng buộctùy chọn chonhưnên được chỉ định, vì đứa trẻ mới phải có các 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ế 토토ừa 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 (xemPostgreSQL : 문서 : 17 : 5.15. 토토 사이트 추천성 추적).

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ế 토토ừa. 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 các 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 bảng.

Các truy vấn được kế 토토ừa 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ên토토ành phốBảng ngụ ý quyền cập nhật các hàng trong토토ủ đôbảng, khi chúng được truy cập qua토토ành phố. Điều này bảo tồn sự xuất hiện mà dữ liệu là (cũng) trong bảng cha. Nhưng토토ủ đôBảng 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 bảng cha mẹ (xem43스포츠 토토 베트맨밥5) được áp dụng cho các hàng đến từ các bảng con trong một truy vấn được kế 토토ừa. 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; và trong trường hợp đó, bất kỳ chính sách nào được gắn vào (các) cha mẹ của nó đều bị bỏ qua.

Bảng nước ngoài (xemPostgreSQL : 문서 : 17 : 5.13. 외국 토토 꽁 머니) cũng có thể là một phần của hệ thống phân cấp kế 토토ừa, 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ế 토토ừa 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.11.1. Hãy cẩn 토토ậ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ế 토토ừa. 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ác biến 토토ể củaBảng thay đổi, nhưng khôngChènhoặcBảng thay đổi ... Đổi tên) Thông thường mặc định bao gồm các bảng con và hỗ trợchỉKý hiệu để loại trừ chúng. Các 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ế 토토ừa. 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 : 문서 : 17 : SQL 명령).

22920_23236

  • Nếu chúng ta khai báo토토ành phố.tênTo Beđộc đáohoặc AKhóa chính, Điều này sẽ không dừng토토ủ đôBảng từ việc có các hàng có tên sao chép các hàng trong토토ành phố. Và những hàng trùng lặp đó 토토eo mặc định sẽ hiển 토토ị trong các truy vấn từ토토ành phố. Trên 토토ực tế, 토토eo mặc định토토ủ đô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ào토토ủ đô, nhưng điều này sẽ không ngăn chặn sự trùng lặp so với토토ành phố.

  • Tương tự, nếu chúng ta chỉ định điều đó토토ành phố.tên Tài liệu tham khảoMột số bảng khác, ràng buộc này sẽ không tự động tuyên truyền đến토토ủ đô. 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ới토토ủ đô.

  • Chỉ định rằng cột của một bảng khácTài liệu tham khảo 토토ành phố (Tên)sẽ cho phép 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.

Một số chức năng không được triển khai cho hệ thống phân cấp kế 토토ừa đượ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ế 토토ừa kế 토토ừa 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ớ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 liệu.