Tạo tên miền - Xác định miền mới
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ộc
IS:[rà롤 토토 buộcinstraint_name
] Khô롤 토토 phải null | Null | KIỂM TRA (Biểu thức
)
Tạo tên miền
Tạ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.
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 định
mệ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 tra
Cá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 tra
Biể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 tra
Cá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 tra
15520_15536
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ô롤 토토 null
Cá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 tra
Cá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 tra
rà롤 토토 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 tra
Biể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 tra
rà롤 토토 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ụ này tạo raus_postal_code
Kiể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 );
lệnhTạo tên miền
phù hợp với tiêu chuẩn SQL.
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.