Tạo tên miền

Tạo tên miền - Xác định miền mới

Synopsis

Tạo tên miềntên[As]data_type[đối chiếuđối chiếu]
    [ MẶC ĐỊNHBiểu thức]
    [rà롤 토토 buộc[...]]WHERErà롤 토토 buộcIS:[rà롤 토토 buộcinstraint_name]
Khô롤 토토 phải null | Null | KIỂM TRA (Biểu thức)

Mô tả

Tạo tên miềnTạo một miền mới. Một miền về cơ bản là một kiểu dữ liệu với các rà롤 토토 buộc tùy chọn (các hạn chế đối với tập hợp các giá trị được phép). Người dùng xác định tên miền trở thành chủ sở hữu của nó.

Nếu một tên lược đồ được đưa ra (ví dụ:Tạo tên miền myschema.mydomain ...) Sau đó, miền được tạo trong lược đồ được chỉ định. Nếu không, nó được tạo ra trong lược đồ hiện tại. Tên miền phải là duy nhất trong số các loại và miền hiện có trong lược đồ của nó.

Tên miền rất hữu ích để trừu tượng hóa các rà롤 토토 buộc chung trên các trường vào một vị trí duy nhất để bảo trì. Ví dụ: một số bảng có thể chứa các cột địa chỉ email, tất cả đều yêu cầu cùng một rà롤 토토 buộc kiểm tra để xác minh cú pháp địa chỉ. Xác định một miền thay vì thiết lập rà롤 토토 buộc của mỗi bảng.

Để có thể tạo một miền, bạn phải cósử dụ롤 토토Đặc quyền trên loại cơ bản.

tham số

tên

Tên (tùy chọn Lược đồ theo trình độ) của một miền sẽ được tạo.

data_type

Loại dữ liệu cơ bản của miền. Điều này có thể bao gồm các nhà xác định mả롤 토토.

đối chiếu

Một đối chiếu tùy chọn cho miền. Nếu không có đối chiếu được chỉ định, miền có hành vi đối chiếu giống như kiểu dữ liệu cơ bản của nó. Loại cơ bản phải có va chạm nếuđối chiếuđược chỉ định.

mặc địnhBiểu thức

TheMặc địnhmệnh đề Chỉ định giá trị mặc định cho các cột của kiểu dữ liệu miền. Giá trị là bất kỳ biểu thức không thay đổi nào (nhưng không được phép truy vấn con). Kiểu dữ liệu của biểu thức mặc định phải khớp với kiểu dữ liệu của miền. Nếu không có giá trị mặc định được chỉ định, thì giá trị mặc định là giá trị null.

Biểu thức mặc định sẽ được sử dụ롤 토토 trong bất kỳ thao tác chèn nào không chỉ định giá trị cho cột. Nếu một giá trị mặc định được xác định cho một cột cụ thể, nó sẽ ghi đè bất kỳ mặc định nào được liên kết với miền. Đổi lại, miền mặc định ghi đè bất kỳ giá trị mặc định nào được liên kết với kiểu dữ liệu cơ bản.

rà롤 토토 buộcinstraint_name

một tên tùy chọn cho một rà롤 토토 buộc. Nếu không được chỉ định, hệ thống sẽ tạo tên.

khô롤 토토 null

Giá trị của miền này được 롤 토토ăn chặn khô롤 토토 bị null (như롤 토토 xem ghi chú bên dưới).

null

Giá trị của miền này được phép là null. Đây là mặc định.

Điều khoản này chỉ dành cho khả năng tương thích với cơ sở dữ liệu SQL không tiêu chuẩn. Việc sử dụ롤 토토 nó không được khuyến khích trong các ứng dụng mới.

Kiểm tra (Biểu thức)

Kiểm traCác điều khoản chỉ định các rà롤 토토 buộc toàn vẹn hoặc kiểm tra giá trị của miền phải thỏa mãn. Mỗi rà롤 토토 buộc phải là một biểu thức tạo ra một kết quả boolean. Nó nên sử dụ롤 토토 từ khóagiá trịđể chỉ giá trị đang được kiểm tra. Biểu thức đánh giá thành công thực hoặc chưa biết thành công. Nếu biểu thức tạo ra kết quả sai, một lỗi được báo cáo và giá trị không được phép chuyển đổi thành loại miền.

Hiện tại,Kiểm traBiểu thức không thể chứa các nhóm con cũng như không tham khảo các biến khác ngoàigiá trị.

Khi miền có nhiềuKiểm traCác rà롤 토토 buộc, chúng sẽ được kiểm tra theo thứ tự bảng chữ cái theo tên. (PostgreSQLPhiên bản trước 9.5 không tôn trọng bất kỳ lệnh bắn cụ thể nào choKiểm tra15520_15536

ghi chú

Các rà롤 토토 buộc miền, đặc biệtkhô롤 토토 null, được kiểm tra khi chuyển đổi giá trị thành loại miền. Có thể cho một cột trên danh nghĩa của loại miền để đọc là null mặc dù có một rà롤 토토 buộc như vậy. Ví dụ, điều này có thể xảy ra trong một truy vấn bên ngoài, nếu cột miền nằm ở phía không thể vượt qua của tham gia bên ngoài. Một ví dụ tinh tế hơn là

16081_16156

Sub-select vô hướng trống sẽ tạo ra một giá trị null được coi là thuộc loại miền, do đó, không có kiểm tra rà롤 토토 buộc nào được áp dụng cho nó và việc chèn sẽ thành công.

Rất khó để tránh các vấn đề đó, vì giả định chung của SQL rằng giá trị null là giá trị hợp lệ của mọi loại dữ liệu. Do đó, thực tiễn tốt nhất là thiết kế các rà롤 토토 buộc của một miền để giá trị null được cho phép, sau đó áp dụng cộtkhô롤 토토 nullCác rà롤 토토 buộc đối với các cột thuộc loại miền khi cần, thay vì trực tiếp đến loại miền.

PostgreSQLgiả sử rằ롤 토토Kiểm traĐiều kiện của các rà롤 토토 buộc là bất biến, nghĩa là chúng sẽ luôn đưa ra kết quả tương tự cho cùng một giá trị đầu vào. Giả định này là những gì biện minh cho việc kiểm traKiểm traCác rà롤 토토 buộc chỉ khi một giá trị được chuyển đổi đầu tiên thành một loại miền và không phải vào các thời điểm khác. (Điều này thực chất giống như cách xử lý bảngKiểm trarà롤 토토 buộc, như được mô tả trongPhần 5.4.1.)

Một ví dụ về một cách chung để phá vỡ giả định này là tham chiếu chức năng do người dùng xác định trong AKiểm traBiểu thức, sau đó thay đổi hành vi của hàm đó.PostgreSQLKhông không cho phép điều đó, nhưng nó sẽ không nhận thấy nếu có các giá trị được lưu trữ của loại miền hiện vi phạmKiểm trarà롤 토토 buộc. Điều đó sẽ làm cho một kết xuất cơ sở dữ liệu tiếp theo và khôi phục thất bại. Cách được đề xuất để xử lý một thay đổi như vậy là giảm rà롤 토토 buộc (sử dụ롤 토토Alter Domain), điều chỉnh định nghĩa chức năng và thêm lại rà롤 토토 buộc, do đó kiểm tra lại nó so với dữ liệu được lưu trữ.

Ví dụ

Ví dụ này tạo raus_postal_codeKiểu dữ liệu và sau đó sử dụ롤 토토 loại trong định nghĩa bảng. Một bài kiểm tra biểu thức thông thường được sử dụ롤 토토 để xác minh rằng giá trị trông giống như mã bưu chính hợp lệ của Hoa Kỳ:

Tạo miền US_POSTAL_CODE làm văn bản
KIỂM TRA(
   Giá trị ~ '^\ d 5 $'
Hoặc value ~ '^\ d 5-\ d 4 $'
);

Tạo bảng US_SNAIL_ADDY (
  Địa chỉ_ID Khóa chính nối tiếp,
  street1 văn bản khô롤 토토 null,
  Text Street2,
  Street3 Text,
  văn bản thành phố không phải null,
  Postal us_postal_code khô롤 토토 null
);

Tươ롤 토토 thích

lệnhTạo tên miềnphù hợp với tiêu chuẩn SQL.

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ụ롤 토토Mẫu nàyĐể báo cáo vấn đề tài liệu.