PostgreSQLthực hiện kế tỷ lệ kèo bóng đá tối nay 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.Thủ đô
Bảng để nó kế tỷ lệ kèo bóng đá tối nay từLas Vegas |
:
Tạo các thành phố tỷ lệ kèo bóng đá tối nay (
Trong trường hợp này,Thủ đô
tỷ lệ kèo bóng đá tối naykế tỷ lệ kèo bóng đá tối nayTất cả các cột của tỷ lệ kèo bóng đá tối nay 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, Bảng có thể kế tỷ lệ kèo bóng đá tối nay 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ề:
độ cao | độ cao
Mặt khác, các truy vấn sau đây tìm thấy tất cả các 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
ở đâ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ỳ tỷ lệ kèo bóng đá tối nay nào bên dướiLas Vegas |
Trong hệ thống phân cấp kế tỷ lệ kèo bóng đá tối nay. Nhiều lệnh mà chúng ta đã thảo luận -Chọn
, Cập nhật
vàXóa
- Hỗ trợChỉ
Từ khóa.
Bạn cũng có thể viết tên tỷ lệ kèo bóng đá tối nay bằng dấu vết*
Để chỉ định rõ ràng rằng các tỷ lệ kèo bóng đá tối nay 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 các 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 tỷ lệ kèo bóng đá tối nay 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àTableoid
Trong mỗi tỷ lệ kèo bóng đá tối nay có thể cho bạn biết tỷ lệ kèo bóng đá tối nay gốc:
Chọn C.Tableoid, C.Name, C.elevation
Trở lại:
Tableoid | Tên |
(Nếu bạn cố gắng sao chép ví dụ này, bạn có thể sẽ nhận được các OID số khác nhau.) Bằng cách thực hiện tham gia vớipg_ class
Bạn có thể thấy tên tỷ lệ kèo bóng đá tối nay 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ụngRegClass
Loại bí danh, sẽ in tỷ lệ kèo bóng đá tối nay oid một cách tượng trưng:
Chọn C.Tableoid :: RegClass, C.Name, C.elevation
Kế tỷ lệ kèo bóng đá tối nay không tự động truyền dữ liệu từChèn
hoặcCopy
lệnh cho các bảng khác trong hệ thống phân cấp kế tỷ lệ kèo bóng đá tối nay. Trong ví dụ của chúng tôi, sau đâyChèn
Câu lệnh sẽ thất bại:
Chèn vào các 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 đếnThủ đô
tỷ lệ kèo bóng đá tối nay, nhưng điều này không xảy ra:Chèn
Luôn chèn vào chính xác tỷ lệ kèo bóng đá tối nay đượ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ìThành phố
tỷ lệ kèo bóng đá tối nay 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ó không cóKhông kế tỷ lệ kèo bóng đá tối nay
mệ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ế tỷ lệ kèo bóng đá tối nay.
Một bảng có thể kế tỷ lệ kèo bóng đá tối nay 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 mẹ. 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.hợp nhấtHồiđể chỉ có một cột như vậy trong tỷ lệ kèo bóng đá tối nay 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ế tỷ lệ kèo bóng đá tối nay bảng thường được thiết lập khi bảng con được tạo, sử dụngkế tỷ lệ kèo bóng đá tối nay
mệnh đề củaTạo tỷ lệ kèo bóng đá tối nayTuyên bố. Ngoài ra, một tỷ lệ kèo bóng đá tối nay đã đượ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ế tỷ lệ kèo bóng đá tối nay
Biến thể củaPostgreSQL: Tài liệu: 11: kèo. Để làm điều này, tỷ lệ kèo bóng đá tối nay 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ế tỷ lệ kèo bóng đá tối nay
Biến thể củatỷ lệ kèo bóng đá tối nay thay đổi
. Việc thêm và loại bỏ các liên kết kế tỷ lệ kèo bóng đá tối nay như thế này có thể hữu ích khi mối quan hệ kế tỷ lệ kèo bóng đá tối nay đang được sử dụng để phân vùng bảng (xemPhần 5.10).
Một cách thuận tiện để tạo một tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay
. Điều này tạo ra một tỷ lệ kèo bóng đá tối nay mới với cùng các cột với tỷ lệ kèo bóng đá tối nay nguồn.Kiểm tra
Các ràng buộc được xác định trên tỷ lệ kèo bóng đá tối nay nguồn,bao gồm các ràng buộc
Tùy chọn đểnhư
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ế tỷ lệ kèo bóng đá tối nay từ bất kỳ bảng cha mẹ nào.Cascade
Tùy chọn (xemPhần 5.13).
PostgreSQL: Tài liệu: 11: kèosẽ 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ế tỷ lệ kèo bóng đá tối nay. 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ụngCascade
Tùy chọn.tỷ lệ kèo bóng đá tối nay thay đổi
tuân theo các 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 tỷ lệ kèo bóng đá tối nay
.
Các truy vấn được kế tỷ lệ kèo bóng đá tối nay 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ật
quyền trênThành phố
tỷ lệ kèo bóng đá tối nay ngụ ý quyền cập nhật các hàng trongThủ đô
tỷ lệ kèo bóng đá tối nay cũng vậy, 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 tỷ lệ kèo bóng đá tối nay cha.Madison |
tỷ lệ kèo bóng đá tối nay không thể được cập nhật trực tiếp mà không có khoản trợ cấp bổ sung. Hai ngoại lệ cho quy tắc này làcắt ngắn
vàtỷ lệ kèo bóng đá tối nay khóa
, trong đó các quyền trên các tỷ lệ kèo bóng đá tối nay con luôn được kiểm tra, liệu chúng được xử lý trực tiếp hay đệ quy thông qua các lệnh đó được thực hiện trên tỷ lệ kèo bóng đá tối nay cha.
Theo cách tương tự, các chính sách bảo mật hàng của tỷ lệ kèo bóng đá tối nay cha mẹ (xemPhần 5.7) được áp dụng cho các hàng đến từ các bảng con trong một truy vấn được kế tỷ lệ kèo bóng đá tối nay. 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;
tỷ lệ kèo bóng đá tối nay nước ngoài (xemPhần 5.11) cũng có thể là một phần của hệ thống phân cấp kế tỷ lệ kèo bóng đá tối nay, như các bảng cha hoặc con, giống như các bảng thông thường. 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ế tỷ lệ kèo bóng đá tối nay 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.
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ế tỷ lệ kèo bóng đá tối nay. 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 thể củatỷ lệ kèo bóng đá tối nay thay đổi
, nhưng khôngChèn
hoặctỷ lệ kèo bóng đá tối nay thay đổi ... Đổi tên
) Thông thường mặc định bao gồm các tỷ lệ kèo bóng đá tối nay 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ế tỷ lệ kèo bóng đá tối nay. 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 hạn chế nghiêm trọng của tính năng kế tỷ lệ kèo bóng đá tối nay 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 tỷ lệ kèo bóng đá tối nay 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áoThành phố
.tên
To Beđộc đáo
hoặc AKhóa chính
, Điều này sẽ không dừngThủ đô
tỷ lệ kèo bóng đá tối nay 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 các 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àoMadison |
, nhưng điều này sẽ không ngăn chặn sự trùng lặp so vớiLas Vegas |
.
Tương tự, nếu chúng ta chỉ định điều đóThành phố
.tên
Tài liệu tham khảo
Một số tỷ lệ kèo bóng đá tối nay 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ảo
ràng buộc đối vớiThủ đô
.
Chỉ định rằng cột của một tỷ lệ kèo bóng đá tối nay khácTài liệu tham khảo Thành phố (Tên)
sẽ cho phép tỷ lệ kèo bóng đá tối nay 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ế tỷ lệ kèo bóng đá tối nay đượ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ế tỷ lệ kèo bóng đá tối nay kế tỷ lệ kèo bóng đá tối nay có hữu ích cho ứng dụng của bạn hay không.