【PostgreSQL】入门篇——介绍表的创建、主键、外键、唯一约束和检查约束的概念及其应用

devtools/2024/10/9 11:16:45/

1. 表的创建

描述

表是数据库中用于存储数据的基本结构。每个表由行和列组成,行表示记录,列表示字段。每个字段有特定的数据类型(如整数、字符串、日期等),并且可以设置各种约束来确保数据的完整性。

语法

CREATE TABLE table_name (column1 datatype [constraint],column2 datatype [constraint],...
);

应用场景

  • 数据存储:表是存储各种数据的基本单位,几乎所有的数据库操作都涉及到表。
  • 数据组织:通过表可以有效地组织和管理数据。

示例

创建一个名为 employees 的表,包含员工的基本信息:

CREATE TABLE employees (employee_id SERIAL PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),department VARCHAR(50),salary NUMERIC(10, 2)
);

解释

  • employee_id SERIAL PRIMARY KEY:定义了一个自增的主键,用于唯一标识每个员工。
  • first_namelast_namedepartment:存储员工的名字、姓氏和部门,使用 VARCHAR 数据类型。
  • salary NUMERIC(10, 2):存储员工的工资,最多 10 位数字,其中 2 位为小数。

2. 主键 (Primary Key)

描述

主键是表中用于唯一标识每一行记录的字段或字段组合。主键的值必须是唯一的,并且不能为空。主键的主要作用是确保数据的唯一性和完整性。

应用场景

  • 唯一标识:每个记录必须有一个唯一的标识符,主键正是用于这个目的。
  • 数据完整性:通过主键可以确保没有重复的记录。

优缺点

  • 优点:确保数据的唯一性,提升查询效率。
  • 缺点:主键一旦设置,无法更改,可能导致数据迁移时的复杂性。

示例

在 employees 表中,employee_id 是主键,使用 SERIAL 数据类型自动生成唯一值。

CREATE TABLE employees (employee_id SERIAL PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),department VARCHAR(50),salary NUMERIC(10, 2)
);

解释

  • PRIMARY KEY 约束确保 employee_id 的值是唯一的,不能重复。

3. 外键 (Foreign Key)

描述

外键是一个表中的字段,它引用另一个表的主键。外键用于建立表之间的关系,确保数据的参照完整性。外键约束确保在子表中插入的值必须在父表中存在。

应用场景

  • 表关系:用于表示表之间的关系,如订单与客户、员工与部门等。
  • 数据完整性:确保在子表中引用的值在父表中是有效的。

优缺点

  • 优点:维护数据的一致性,防止无效数据的插入。
  • 缺点:可能影响性能,特别是在涉及大量数据的情况下。

示例

创建一个 departments 表,并在 employees 表中添加外键,引用 departments 表的主键:

CREATE TABLE departments (department_id SERIAL PRIMARY KEY,department_name VARCHAR(50) UNIQUE
);CREATE TABLE employees (employee_id SERIAL PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),department_id INT,salary NUMERIC(10, 2),FOREIGN KEY (department_id) REFERENCES departments(department_id)
);

解释

  • FOREIGN KEY (department_id) REFERENCES departments(department_id):这条语句确保 employees 表中的 department_id 必须在 departments 表中存在。

4. 唯一约束 (Unique Constraint)

描述

唯一约束确保某一列或多列的值在表中是唯一的。允许空值,但每个非空值必须是唯一的。唯一约束可以应用于多个列的组合。

应用场景

  • 防止重复数据:确保某些字段(如电子邮件、用户名)在表中是唯一的。
  • 组合唯一性:可以对多个列组合设置唯一约束。

优缺点

  • 优点:确保数据的唯一性,避免重复记录。
  • 缺点:可能会影响插入性能,尤其是在高并发情况下。

示例

在 employees 表中,添加唯一约束以确保每个员工的电子邮件地址是唯一的:

CREATE TABLE employees (employee_id SERIAL PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),email VARCHAR(100) UNIQUE,department_id INT,salary NUMERIC(10, 2),FOREIGN KEY (department_id) REFERENCES departments(department_id)
);

解释

  • UNIQUE 约束确保 email 字段的值在 employees 表中是唯一的。

5. 检查约束 (Check Constraint)

描述

检查约束用于限制列中的值,确保它们满足特定条件。可以用于确保数据的有效性,如数值范围、字符串格式等。

应用场景

  • 数据有效性:确保插入的数据符合业务规则。
  • 范围限制:限制数值在特定范围内。

优缺点

  • 优点:增强数据的完整性,防止无效数据的插入。
  • 缺点:复杂的检查条件可能影响性能。

示例

在 employees 表中,添加检查约束以确保员工的工资大于零:

CREATE TABLE employees (employee_id SERIAL PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),email VARCHAR(100) UNIQUE,department_id INT,salary NUMERIC(10, 2) CHECK (salary > 0),FOREIGN KEY (department_id) REFERENCES departments(department_id)
);

解释

  • CHECK (salary > 0) 约束确保 salary 字段的值必须大于零,防止插入无效的工资数据。

总结

数据库设计中,合理使用表、主键、外键、唯一约束和检查约束,可以确保数据的完整性和一致性。以下是这些概念的简要总结:

  • 表的创建:定义数据的存储结构。
  • 主键:唯一标识表中的每一行记录,确保数据的唯一性。
  • 外键:建立表之间的关系,确保参照完整性,防止无效数据。
  • 唯一约束:确保某一列的值在表中是唯一的,防止重复数据。
  • 检查约束:限制列中的值以确保数据的有效性。

通过这些约束,数据库能够更好地维护数据的完整性和一致性,防止无效或重复的数据被插入。


http://www.ppmy.cn/devtools/120391.html

相关文章

留学生如何适应海外生活以及应对文化差异

对于即将出国学习和生活的留学生来说,文化差异和生活方式的变化常常是一个紧迫的问题。那么,如何应对这些文化差异,以及如何适应新的学习环境和社交生活呢?本文将分享一些具体可行的建议和方法,助您顺利跨越这道难关&a…

Java项目实战II基于Java+Spring Boot+MySQL的大学城水电管理系统(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者 一、前言 随着教育信息化进程的加速,传统的学生请假方式已逐渐显露出效率低下、流程繁琐等弊端。为…

docker学习

一、centos安装docker 本实验是以centos操作系统。 # 移除旧版本docker sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine# 配置docker yum源。 sudo yum install -y…

Python Selenium常用语法汇总(包含XPath语法)

Python 的 Selenium 库是一个强大的工具,用于自动化浏览器操作,常用于网页测试、爬虫等场景。下面是一些常用的 Selenium 语法和操作方法总结: 1. 安装 Selenium 和 WebDriver 首先,你需要安装 Selenium 库以及对应的 WebDriver…

Qt C++设计模式->外观模式

外观模式(Facade Pattern)是一种结构型设计模式,提供了一个统一的接口,用来访问子系统中的一群接口。外观模式通过定义一个高级接口,使得子系统更加容易使用,避免了客户端直接与子系统的复杂交互。 外观模…

PHP爬虫:获取商品SKU详细信息的艺术

在电子商务的世界里,SKU(Stock Keeping Unit,库存单位)是每个商品的唯一标识符,它包含了商品的详细信息,如尺寸、颜色、价格等。对于商家和开发者来说,获取商品的SKU详细信息对于库存管理、订单…

旅游避坑指南

1.火车站旁白的小摊贩,还有周边的小饭店百分之百是黑店,不仅难吃要死而且巨黑!!! 可以地图上搜索附近的大型商超,例如泰安市的银座商超,里面的东西不仅好吃而且价格透明,还有很多当…

easyExcel使用模版填充excel,合并单元格

一、最终效果 二、制作模版 1、制作填充模版 模版在代码中保存的位置 2、Controller /*** 下载模板*/ RequestMapping(value "exportData") public void exportData(KqKqb kqKqb,HttpServletResponse response, HttpServletRequest request) throws IOExceptio…