Vấn đề:
Bạn muốn biết tên mặc định của các ràng buộc trong bảng trong PostgreSQL.
Ví dụ:
Trong cơ sở dữ liệu của chúng tôi, chúng tôi tạo hai bảng, country
và student
, với các ràng buộc sau:PRIMARY KEY
(cột id
trong các bảng country
và student
), FOREIGN KEY
(cột country_id
trong bảng student
), DEFAULT
(cột name
trong bảng student
), UNIQUE
(cột name
trong bảng country
và cột personal_number
trong bảng student
) và CHECK
(cột age
trong bảng student
).
Giải pháp:
CREATE TABLE country ( id int NOT NULL primary key, name varchar(100) UNIQUE ); CREATE TABLE student ( id int NOT NULL primary key, name varchar(100) NOT NULL DEFAULT 'unknown', personal_number varchar(100) UNIQUE, age int CHECK(age>15), country_id int, FOREIGN KEY(country_id) references country(id) );
Hãy hiển thị cách PostgreSQL đặt tên cho các ràng buộc của các bảng này theo mặc định. Sử dụng truy vấn này để xem chúng:
SELECT conname, contype FROM pg_catalog.pg_constraint;
Đây là kết quả:
tên con | contype |
---|---|
country_pkey | p |
country_name_key | u |
student_age_check | c |
student_pkey | p |
student_personal_number_key | u |
student_country_id_fkey | f |
Thảo luận:
Khi chúng tôi tạo bảng của mình, chúng tôi đặt các ràng buộc cho một số cột. Tuy nhiên, chúng tôi không chỉ định tên cho các ràng buộc này, vì vậy chúng được đặt tên theo mặc định trong PostgreSQL. Tên mặc định cho các ràng buộc được tạo như thế nào?
Trong PostgreSQL, các loại ràng buộc mặc định là p
, f
, u
và c
.
PRIMARY KEY
được đặt tên theo mặc định với tên bảng, một dấu gạch dưới (‘_
’) Và‘ pkey
'. Trong bảng kết quả của chúng tôi ở trên, bạn có thể thấy hai PRIMARY KEY
tên (nhập ‘p
’) - một cái tên country_pkey
ở country
bảng và bảng khác có tên student_pkey
trong student
bảng.
FOREIGN KEY
được chỉ ra bởi loại ràng buộc ‘f
'. Tên của nó được tạo bởi tên của bảng hiện tại, một dấu gạch dưới (‘_
’), Tên cột, một dấu gạch dưới khác (‘ _
’) Và‘ fkey
'. Trong ví dụ của chúng tôi, tên của ràng buộc khóa ngoại là student_country_id_fkey
, vì cột country_id
trong bảng student
là một khóa ngoại.
Tên mặc định cho CHECK
ràng buộc tương tự như khóa ngoại, chỉ khác là nó thuộc loại ràng buộc ‘c
'. Trong ví dụ của chúng tôi, cột age
trong bảng student
có ràng buộc này, vì vậy tên ràng buộc mặc định là student_age_check
.
Tên mặc định cho UNIQUE
ràng buộc (nhập ‘u
’) Là tên bảng, một dấu gạch dưới (‘ _
’), Tên cột, một dấu gạch dưới khác (‘ _
’) Và‘ key
'. Trong ví dụ của chúng tôi, bảng student
có UNIQUE
ràng buộc có tên student_personal_number_key
. Đối với nhiều cột trong một ràng buộc, tên tuân theo một quy ước tương tự nhưng chứa tên của tất cả các cột trong định nghĩa của ràng buộc.