PostgreSQL 的一个重要特性之一是能够对数据实施各种约束,以确保数据完整性和可靠性。今天的文章中,我们将概述 PostgreSQL 的各种约束类型并结合免费的 "dvdrental" 示例数据库 中的例子探索他们的使用方法。
1. 检查约束:
检查约束允许你在插入或更新数据时指定列必须满足的条件,从而确保数据库里仅存储有效数据。例如,如果你有一个“customers”表,并希望确保用户的年龄至少为 18,那么你可以添加一个检查约束来实现,如下所示:
ALTER TABLE customers
ADD CONSTRAINT check_age CHECK (age >= 18);
2. 非空约束:
非空约束确保某列不能包含空值。例如,在“customer”表中,如果你希望确保每个客户都有一个有效的电子邮件地址,你可以在电子邮件列中强制执行非空约束,如下所示:
ALTER TABLE customers
ALTER COLUMN email SET NOT NULL;
3. 唯一约束:
唯一约束确保一列或一组列中的值在表的所有行中是唯一的,这通常会用在避免出现重复的字段中,如用户名称或电子邮件地址字段。例如,在“customer”表中,如果你希望确保每个客户都有一个唯一的电子邮件地址,你可以添加一个唯一约束,如下所示:
ALTER TABLE customers
ADD CONSTRAINT unique_email UNIQUE (email);
4. 主键:
主键是一个唯一约束和非空约束的组合,它唯一标识表中的每条记录,并确保数据的完整性。在“customer”表中,你可能有一个列名称为“customer_id”,该列作为主键:
ALTER TABLE customers
ADD CONSTRAINT pk_customer_id PRIMARY KEY (customer_id);
5. 外键:
外键通过强制引用完整性来建立两个表之间的关系。他们确保一个表中的列值与另一个表中的列值相匹配。例如,在“rental”表,如果你希望确保每个租赁记录都引用一个有效的客户,你可以添加一个外键约束,如下所示:
ALTER TABLE rental
ADD CONSTRAINT fk_customer_id
FOREIGN KEY (customer_id)
REFERENCES customers(customer_id);
6. 排他约束:
排他约束确保表中没有两行满足指定的谓词,这使得你可以定义除简单唯一约束或检查约束之外的自定义约束。例如,你可能有一个“bookings”表,你希望确保同一个房间的两个预订在时间上不会重叠:
ALTER TABLE bookings
ADD CONSTRAINT exclude_overlapping_bookings
EXCLUDE USING GIST (room_id WITH =, booking_range WITH &&);
Navicat 中的约束
Navicat for PostgreSQL 16 提供了一个易于使用的图形化表设计器,用于创建和管理 PostgreSQL 约束:
![Screenshot_Navicat_16_PostgreSQL_Windows_02_ObjectDesign.png](https://www.navicat.com/link/Blog/Image/2024/20240503/CN/Screenshot_Navicat_16_PostgreSQL_Windows_02_ObjectDesign.png)
在“键”列单击,你就可以在一个或多个字段中添加键图标,主键约束也被创建了。其他约束可在他们关联的选项卡上查看到。
结语
PostgreSQL 提供多种不同类型的约束,用于维护数据完整性和实施业务规则。理解这些约束以及如何有效的使用它们对于设计健壮和可靠的数据库模式非常重要。
正在寻找易于使用的 PostgreSQL 数据库开发的图形化工具吗?Navicat 16 for PostgreSQL 能满足你的需求。点击 此处 下载全功能的应用程序,免费试用 14 天!