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

tỷ lệ kèo bóng đá5.3. Hạn chế

Kiểu dữ liệu là một cách để hạn chế loại dữ liệu có thể Được lưu trữ trong một bàn. Đối với nhiều ứng dụng, tuy nhiên, tỷ lệ kèo bóng đá Họ cung cấp là quá thô. Ví dụ: một cột chứa một Giá sản phẩm có lẽ chỉ nên chấp nhận các giá trị tích cực. Nhưng Không có loại dữ liệu tiêu chuẩn chỉ chấp nhận các số dương. Một vấn đề khác là bạn có thể muốn hạn chế dữ liệu cột với tôn trọng các cột hoặc hàng khác. Ví dụ, trong một bảng chứa thông tin sản phẩm, chỉ nên có một hàng cho mỗi số sản phẩm.

10699_11021

5.3.1. Kiểm tra Hạn chế

Một tỷ lệ kèo bóng đá kiểm tra là loại tỷ lệ kèo bóng đá chung nhất. Nó cho phép bạn chỉ định rằng giá trị trong một cột nhất định phải thỏa mãn biểu hiện boolean (giá trị sự thật). Ví dụ, đến Yêu cầu giá sản phẩm tích cực, bạn có thể sử dụng:

Tạo sản phẩm bảng (
    sản phẩm_no số nguyên,
    tên văn bản,
    Giá sốKiểm tra (Giá 0));

Như bạn thấy, định nghĩa tỷ lệ kèo bóng đá xuất hiện sau kiểu dữ liệu, Chỉ giống như định nghĩa giá trị mặc định. Giá trị và tỷ lệ kèo bóng đá mặc định có thể được liệt kê trong bất kỳ đơn đặt hàng. Một tỷ lệ kèo bóng đá kiểm tra bao gồm khóa từKiểm tratheo sau là một biểu thức trong dấu ngoặc đơn. Biểu thức tỷ lệ kèo bóng đá kiểm tra sẽ liên quan đến do đó bị hạn chế, nếu không thì tỷ lệ kèo bóng đá sẽ không tạo ra Quá nhiều ý nghĩa.

Bạn cũng có thể đặt cho tỷ lệ kèo bóng đá một tên riêng. Điều này làm rõ thông báo lỗi và cho phép bạn tham khảo tỷ lệ kèo bóng đá khi bạn cần phải thay đổi nó. Cú pháp là:

Tạo sản phẩm bảng (
    sản phẩm_no số nguyên,
    tên văn bản,
    Giá sốtỷ lệ kèo bóng đá tích cực_priceKiểm tra (Giá 0)
);

Vì vậy, để chỉ định một tỷ lệ kèo bóng đá được đặt tên, hãy sử dụng từ khóatỷ lệ kèo bóng đátheo sau là một định danh theo sau là Định nghĩa tỷ lệ kèo bóng đá. (Nếu bạn không chỉ định tên tỷ lệ kèo bóng đá trong Bằng cách này, hệ thống chọn tên cho bạn.)

Một tỷ lệ kèo bóng đá kiểm tra cũng có thể tham khảo một số cột. Nói bạn lưu trữ giá thông thường và giá chiết khấu, và bạn muốn đảm bảo rằng giá chiết khấu thấp hơn so với thông thường giá:

Tạo sản phẩm bảng (
    sản phẩm_no số nguyên,
    tên văn bản,
    Kiểm tra số giá (Giá 0),
    Trở nên chiết khấu_price kiểm tra số (chiết khấu_price 0),13023_13060);

Hai tỷ lệ kèo bóng đá đầu tiên sẽ trông quen thuộc. Cái thứ ba Sử dụng một cú pháp mới. Nó không được gắn vào một cột cụ thể, Thay vào đó, nó xuất hiện dưới dạng một mục riêng biệt trong cột được phân tách bằng dấu phẩy danh sách. Định nghĩa cột và các định nghĩa tỷ lệ kèo bóng đá này có thể là được liệt kê theo thứ tự hỗn hợp.

Chúng tôi nói rằng hai tỷ lệ kèo bóng đá đầu tiên là các tỷ lệ kèo bóng đá cột, trong khi cái thứ ba là một tỷ lệ kèo bóng đá bảng vì nó được viết tách biệt với bất kỳ một định nghĩa cột. Các tỷ lệ kèo bóng đá cột có thể cũng được viết như các tỷ lệ kèo bóng đá bảng, trong khi điều ngược lại không nhất thiết có thể, vì một tỷ lệ kèo bóng đá cột được cho là Chỉ tham khảo cột nó được đính kèm. (PostgreSQLkhông thực thi quy tắc đó, nhưng bạn nên làm theo nó nếu bạn muốn tỷ lệ kèo bóng đá định nghĩa bảng của mình hoạt động tỷ lệ kèo bóng đá hệ thống cơ sở dữ liệu khác.) Ví dụ trên cũng có thể được viết BẰNG:

Tạo sản phẩm bảng (
    sản phẩm_no số nguyên,
    tên văn bản,
    Giá số,
    Kiểm tra (Giá 0),
    giảm chiết khấu_price số,
    Kiểm tra (chiết khấu_price 0),
    Kiểm tra (Giá Giảm giá_price)
);

hoặc thậm chí:

14241_14446

Đó là vấn đề của hương vị.

Tên có thể được gán cho các tỷ lệ kèo bóng đá bảng theo cách tương tự như Các tỷ lệ kèo bóng đá cột:

Tạo sản phẩm bảng (
    sản phẩm_no số nguyên,
    tên văn bản,
    Giá số,
    Kiểm tra (Giá 0),
    giảm chiết khấu_price số,
    Kiểm tra (chiết khấu_price 0),tỷ lệ kèo bóng đá hợp lệ_discountKiểm tra (Giá Giảm giá_price)
);

Cần lưu ý rằng một tỷ lệ kèo bóng đá kiểm tra được thỏa mãn nếu Kiểm tra biểu thức đánh giá thành giá trị true hoặc null. Kể từ hầu hết Biểu thức sẽ đánh giá đến giá trị null nếu bất kỳ toán hạng nào là null, Chúng sẽ không ngăn chặn các giá trị null trong các cột bị tỷ lệ kèo bóng đá. ĐẾN đảm bảo rằng một cột không chứa các giá trị null, không có null tỷ lệ kèo bóng đá được mô tả trong phần tiếp theo có thể được sử dụng.

5.3.2. Không null Hạn chế

Một tỷ lệ kèo bóng đá không có null chỉ cần chỉ định rằng một cột không được Giả sử giá trị null. Ví dụ về cú pháp:

Tạo sản phẩm bảng (
    Product_No Integerkhông null,,
    Tên văn bảnkhông null,,
    Giá số
);

15670_15816Kiểm tra (Cột_namekhông phải là null), nhưng trongPostgreSQLTạo rõ ràng tỷ lệ kèo bóng đá không null là hiệu quả hơn. Hạn chế là bạn không thể đưa ra tên rõ ràng cho các tỷ lệ kèo bóng đá không có null đã tạo ra điều này đường.

Tất nhiên, một cột có thể có nhiều hơn một tỷ lệ kèo bóng đá. Chỉ Viết các tỷ lệ kèo bóng đá lần lượt:

16250_16383

Thứ tự không quan trọng. Nó không nhất thiết phải xác định trong Đơn hàng nào các tỷ lệ kèo bóng đá được kiểm tra.

Thekhông nulltỷ lệ kèo bóng đá có nghịch đảo: Thenulltỷ lệ kèo bóng đá. Điều này không có nghĩa là Rằng cột phải là null, chắc chắn sẽ vô dụng. Thay vào đó, điều này chỉ cần chọn hành vi mặc định mà cột có thể là vô giá trị. Thenulltỷ lệ kèo bóng đá thì không hiện diện trong tiêu chuẩn SQL và không nên được sử dụng trong di động ứng dụng. (Nó chỉ được thêm vàoPostgreSQLĐể tương thích với một số người khác Hệ thống cơ sở dữ liệu.) Một số người dùng, tuy nhiên, thích nó vì nó làm cho nó Dễ dàng chuyển đổi tỷ lệ kèo bóng đá trong một tệp tập lệnh. Ví dụ, bạn có thể bắt đầu với:

Tạo sản phẩm bảng (
    sản phẩm_no số nguyên null,
    tên văn bản null,
    Giá null số
);

và sau đó chènkhôngTừ khóa trong đó mong muốn.

Tip:Trong hầu hết cơ sở dữ liệu thiết kế phần lớn tỷ lệ kèo bóng đá cột nên được đánh dấu không phải null.

5.3.3. Độc nhất Hạn chế

Các tỷ lệ kèo bóng đá duy nhất đảm bảo rằng dữ liệu có trong một cột, hoặc một nhóm các cột, là duy nhất trong số tất cả các hàng trong bảng. Cú pháp là:

Tạo sản phẩm bảng (
    Product_No Integerđộc đáo,,
    tên văn bản,
    Giá số
);

Khi được viết dưới dạng tỷ lệ kèo bóng đá cột và:

Tạo sản phẩm bảng (
    sản phẩm_no số nguyên,
    tên văn bản,
    Giá số,độc đáo (sản phẩm_no));

Khi được viết dưới dạng tỷ lệ kèo bóng đá bảng.

Để xác định một tỷ lệ kèo bóng đá duy nhất cho một nhóm các cột, hãy viết nó như một tỷ lệ kèo bóng đá bảng với các tên cột được phân tách bởi dấu phẩy:

Tạo ví dụ bảng (
    tỷ lệ kèo bóng đá số nguyên,
    b số nguyên,
    C Số nguyên,độc đáo (a, c));

Điều này chỉ định rằng sự kết hợp của các giá trị trong chỉ định các cột là duy nhất trên toàn bộ bảng, mặc dù bất kỳ tỷ lệ kèo bóng đá trong những các cột không cần phải (và thông thường không phải) duy nhất.

Bạn có thể gán tên của riêng mình cho một tỷ lệ kèo bóng đá duy nhất, trong Cách thông thường:

18829_18878tỷ lệ kèo bóng đá phải_be_differentĐộc đáo,
    tên văn bản,
    Giá số
);

Thêm một tỷ lệ kèo bóng đá duy nhất sẽ tự động tạo một Chỉ mục B-Tree trên cột hoặc nhóm các cột được liệt kê trong tỷ lệ kèo bóng đá. Một hạn chế duy nhất chỉ bao gồm một số hàng không thể được viết như một tỷ lệ kèo bóng đá độc đáo, nhưng có thể thực thi Một hạn chế như vậy bằng cách tạo một duy nhấtChỉ số tỷ lệ kèo bóng đá phần.

19337_19930

5.3.4. Khóa chính

Một tỷ lệ kèo bóng đá khóa chính chỉ ra rằng một cột hoặc nhóm của Các cột, có thể được sử dụng như một định danh duy nhất cho các hàng trong bảng. Điều này đòi hỏi các giá trị là cả độc đáo và không null. Vì vậy, Theo sau hai định nghĩa bảng chấp nhận cùng một dữ liệu:

Tạo sản phẩm bảng (
    Product_no Integer độc đáo không phải NULL,
    tên văn bản,
    Giá số
);
Tạo sản phẩm bảng (
    Product_No IntegerKhóa chính,,
    tên văn bản,
    Giá số
);

Các phím chính có thể kéo dài nhiều hơn một cột; Cú pháp là Tương tự như các tỷ lệ kèo bóng đá duy nhất:

Tạo ví dụ bảng (
    tỷ lệ kèo bóng đá số nguyên,
    b số nguyên,
    C Số nguyên,Khóa chính (A, C));

Thêm khóa chính sẽ tự động tạo một cây B duy nhất chỉ mục trên cột hoặc nhóm các cột được liệt kê trong khóa chính, và sẽ tỷ lệ kèo bóng đá (các) cột được đánh dấuKhông VÔ GIÁ TRỊ.

Bảng có thể có nhiều nhất một khóa chính. (Có thể có bất kỳ Số lượng các tỷ lệ kèo bóng đá duy nhất và không có null, có chức năng gần như giống nhau, nhưng chỉ có một Khóa chính.) Lý thuyết cơ sở dữ liệu quan hệ chỉ ra rằng mỗi bảng Phải có một khóa chính. Quy tắc này không được thi hành bởiPostgreSQL, nhưng thường là tốt nhất để theo dõi Nó.

21489_21943

5.3.5. Chìa khóa nước ngoài

Một tỷ lệ kèo bóng đá khóa nước ngoài chỉ định rằng các giá trị trong một cột (hoặc một nhóm các cột) phải khớp với các giá trị xuất hiện trong một số hàng của một bảng khác. Chúng tôi nói điều này duy trìTính toàn vẹn tham chiếuGiữa hai liên quan bảng.

Nói rằng bạn có bảng sản phẩm mà chúng tôi đã sử dụng nhiều lần đã:

Tạo sản phẩm bảng (
    sản phẩm_no khóa chính số nguyên,
    tên văn bản,
    Giá số
);

Hãy giả sử bạn có một bảng lưu trữ đơn đặt hàng các sản phẩm. Chúng tôi muốn đảm bảo rằng bảng đơn đặt hàng chỉ chứa Đơn đặt hàng các sản phẩm thực sự tồn tại. Vì vậy, chúng tôi xác định một khóa nước ngoài tỷ lệ kèo bóng đá trong bảng đơn đặt hàng tham chiếu các sản phẩm bàn:

Tạo đơn đặt hàng bảng (
    Order_id Số nguyên chính, khóa chính,
    Product_No Integer22933_22967,,
    Số lượng số lượng
);

Bây giờ không thể tạo tỷ lệ kèo bóng đá đơn đặt hàng với không nullsản phẩm_no23096_23148

Chúng tôi nói rằng trong tình huống này, bảng đơn hàng làTham chiếuBảng và bảng sản phẩm làđược tham chiếuBảng. Tương tự, có tỷ lệ kèo bóng đá cột tham chiếu và tham chiếu.

Bạn cũng có thể rút ngắn lệnh trên thành:

Tạo đơn đặt hàng bảng (
    Order_id Số nguyên chính, khóa chính,
    Product_No IntegerTài liệu tham khảo Sản phẩm,,
    Số lượng số lượng
);

Vì không có cột liệt kê, khóa chính của Bảng được tham chiếu được sử dụng làm (tỷ lệ kèo bóng đá) cột được tham chiếu.

Khóa ngoại cũng có thể tỷ lệ kèo bóng đá và tham khảo một nhóm cột. Như thường lệ, sau đó nó cần được viết trong tỷ lệ kèo bóng đá bảng hình thức. Đây là một ví dụ về cú pháp giả tạo:

Tạo bảng T1 (
  tỷ lệ kèo bóng đá khóa chính số nguyên,
  b số nguyên,
  C Số nguyên,Khóa nước ngoài (b, c) Tài liệu tham khảo khác_table (C1, C2));

Tất nhiên, số và loại của các cột bị tỷ lệ kèo bóng đá cần Để khớp với số và loại của các cột được tham chiếu.

Bạn có thể gán tên của riêng mình cho một tỷ lệ kèo bóng đá khóa nước ngoài, trong cách thông thường.

Bảng có thể có nhiều hơn một tỷ lệ kèo bóng đá khóa nước ngoài. Đây là Được sử dụng để thực hiện các mối quan hệ nhiều đến nhiều giữa các bảng. Nói Bạn có bảng về sản phẩm và đơn đặt hàng, nhưng bây giờ bạn muốn cho phép một thứ tự chứa nhiều sản phẩm có thể (mà Cấu trúc trên không cho phép). Bạn có thể sử dụng bảng này kết cấu:

Tạo sản phẩm bảng (
    sản phẩm_no khóa chính số nguyên,
    tên văn bản,
    Giá số
);

Tạo đơn đặt hàng bảng (
    Order_id Số nguyên chính, khóa chính,
    Text_address văn bản,
    ...
);

Tạo bảng thứ tự_items (
    sản phẩm_no tỷ lệ kèo bóng đá sản phẩm tham chiếu số nguyên,
    Order_id Integer TÀI LIỆU THAM KHẢO ĐẶT HÀNG,
    số lượng số lượng,
    Khóa chính (sản phẩm_no, order_id)
);

Lưu ý rằng khóa chính chồng chéo với tỷ lệ kèo bóng đá khóa nước ngoài trong bảng cuối cùng.

Chúng tôi biết rằng các khóa nước ngoài không cho phép tạo ra các đơn đặt hàng Không liên quan đến bất kỳ sản phẩm. Nhưng điều gì sẽ xảy ra nếu tỷ lệ kèo bóng đá sản phẩm bị loại bỏ Sau tỷ lệ kèo bóng đá đơn đặt hàng được tạo ra mà tham chiếu nó? SQL cho phép bạn xử lý điều đó là tốt. Theo trực giác, chúng tôi có tỷ lệ kèo bóng đá vài tùy chọn:

  • Không cho phép xóa sản phẩm được tham chiếu

  • Xóa tỷ lệ kèo bóng đá đơn đặt hàng

  • cái gì khác?

Để minh họa điều này, hãy thực hiện chính sách sau đây trên Ví dụ về mối quan hệ nhiều người ở trên: Khi ai đó muốn Xóa tỷ lệ kèo bóng đá sản phẩm vẫn được tham chiếu bởi tỷ lệ kèo bóng đá đơn đặt hàng (thông quaorder_items), chúng tôi không cho phép nó. Nếu ai đó Xóa tỷ lệ kèo bóng đá đơn đặt hàng, các mục đặt hàng cũng bị xóa:

25880_26144Khi xóa hạn chế,,
    Order_id Integer TÀI LIỆU THAM KHẢO Đơn đặt hàngKhi xóa Cascade,,
    số lượng số lượng,
    Khóa chính (sản phẩm_no, order_id)
);

Hạn chế và xếp tầng xóa là hai loại phổ biến nhất tùy chọn.Hạn chếNgăn chặn việc xóa A Hàng được tham chiếu.không có hành động26517_26740Không hành độngCho phép kiểm tra được hoãn lại cho đến sau này trong giao dịch, trong khiHạn chếkhông.)CascadeChỉ định rằng khi tỷ lệ kèo bóng đá hàng được tham chiếu bị xóa, việc tham chiếu hàng Nó cũng nên được tự động xóa. Có hai cái khác tùy chọn:Đặt NULLĐặt mặc định. Những điều này gây ra (các) cột tham chiếu Trong (các) hàng tham chiếu sẽ được đặt thành null hoặc mặc định của chúng Các giá trị, tương ứng, khi hàng được tham chiếu bị xóa. Lưu ý rằng Những điều này không bào chữa cho bạn khỏi việc quan sát bất kỳ tỷ lệ kèo bóng đá. Vì Ví dụ, nếu một hành động chỉ địnhĐặt MẶC ĐỊNHNhưng giá trị mặc định sẽ không thỏa mãn nước ngoài tỷ lệ kèo bóng đá chính, hoạt động sẽ không thành công.

Tương tự nhưKhi xóacòn cótrên cập nhậtđược gọi khi A Cột được tham chiếu được thay đổi (cập nhật). tỷ lệ kèo bóng đá hành động có thể là giống nhau. Trong trường hợp này,CascadeCó nghĩa là tỷ lệ kèo bóng đá giá trị được cập nhật của (tỷ lệ kèo bóng đá) cột được tham chiếu phải được sao chép vào (tỷ lệ kèo bóng đá) hàng tham chiếu.

Thông thường, một hàng tham chiếu không cần phải đáp ứng khóa nước ngoài tỷ lệ kèo bóng đá nếu bất kỳ cột tham chiếu của nó là null. Nếu nhưkhớp đầy đủđược thêm vào khóa nước ngoài Tuyên bố, một hàng tham chiếu thoát khỏi việc thỏa mãn các tỷ lệ kèo bóng đá Chỉ khi tất cả các cột tham chiếu của nó là null (do đó, sự kết hợp của null và Các giá trị không null được đảm bảo sẽ thất bạiKết hợp ĐẦYtỷ lệ kèo bóng đá). Nếu bạn không muốn tham chiếu hàng có thể tránh thỏa mãn các tỷ lệ kèo bóng đá quan trọng nước ngoài, tuyên bố (các) cột tham chiếu làkhông null.

28470_28765Xóacủa tỷ lệ kèo bóng đá hàng từ bảng được tham chiếu hoặc tỷ lệ kèo bóng đáCập nhậtcủa cột được tham chiếu sẽ yêu cầu quét bảng tham chiếu cho các hàng khớp với giá trị cũ, nó thường là Một ý tưởng tốt để lập chỉ mục các cột tham chiếu quá. Bởi vì đây là Không phải lúc nào cũng cần thiết, và có nhiều lựa chọn có sẵn về cách chỉ mục, khai báo tỷ lệ kèo bóng đá khóa nước ngoài không Tự động tạo một chỉ mục trên các cột tham chiếu.

Thông tin thêm về việc cập nhật và xóa dữ liệu ởChương 6. Cũng xem mô tả của khóa nước ngoài Cú pháp tỷ lệ kèo bóng đá trong tài liệu tham khảo choTạo bảng.

5.3.6. Các tỷ lệ kèo bóng đá loại trừ

Các tỷ lệ kèo bóng đá loại trừ đảm bảo rằng nếu có hai hàng nào được so sánh trên các cột hoặc biểu thức được chỉ định bằng cách sử dụng người vận hành, ít nhất một trong những so sánh của nhà điều hành này sẽ trở lại sai hoặc null. Cú pháp là:

Tạo vòng tròn bảng (
    vòng tròn c,
    Loại trừ bằng cách sử dụng gist (c với &&)
);

Xem thêmTạo bảng ... tỷ lệ kèo bóng đá ... loại trừcho chi tiết.

Thêm tỷ lệ kèo bóng đá loại trừ sẽ tự động tạo một Chỉ mục của loại được chỉ định trong khai báo tỷ lệ kèo bóng đá.