在 PostgreSQL 中创建员工表

PostgreSQLBeginner
立即练习

介绍

在本次挑战中,你将设计并在 PostgreSQL 中创建一个名为 employee_contacts 的表,用于存储员工的联系方式,并通过合理的数据类型和约束确保数据完整性。你将在一个预配置的环境中进行操作,其中 employees 表已经存在。

你的任务包括使用 psqlpostgres 用户身份连接到 PostgreSQL 数据库,然后直接执行 SQL 命令来创建 employee_contacts 表。该表应包含以下列:contact_id(主键,自增)、employee_id(引用 employees 表的外键)、phone_number(唯一)以及 email(非空)。

这是一个「挑战」项目,它与「引导实验」的不同之处在于,你需要尝试独立完成挑战任务,而不是按照实验步骤一步步学习。挑战通常具有一定的难度。如果你觉得困难,可以与 Labby 讨论或查看解决方案。历史数据显示,这是一个 初学者 级别的挑战,通过率为 95%。它在学习者中获得了 99% 的好评率。

创建员工表

设计一张用于存储员工联系方式的表,通过选择合适的数据类型和约束来确保数据的完整性。

系统已经为你创建好了 employees 表。如果你没有看到它,可以使用以下命令进行创建:

CREATE TABLE employees (
    employee_id SERIAL PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL
);

任务

  • 在 PostgreSQL 中创建一张名为 employee_contacts 的表。该表应包含 contact_id(主键)、employee_id(引用 employees 表的外键)、phone_number(唯一)和 email(非空)列。
  • 确保 employee_id 列正确引用了 employees 表中的 employee_id 列。

要求

  1. contact_id 列必须是自增主键。
  2. phone_number 列必须具有唯一性。
  3. email 列不允许包含 NULL 值。
  4. employee_id 列必须是引用 employees 表的外键。
  5. 使用 psql 执行 SQL 命令。

示例

employees 表和 employee_contacts 表的结构应如下所示:

employees 和 contacts 表的结构
                                          Table "public.employees"
   Column    |         Type          | Collation | Nullable |                    Default
-------------+-----------------------+-----------+----------+------------------------------------------------
 employee_id | integer               |           | not null | nextval('employees_employee_id_seq'::regclass)
 first_name  | character varying(50) |           |          |
 last_name   | character varying(50) |           |          |
Indexes:
    "employees_pkey" PRIMARY KEY, btree (employee_id)
Referenced by:
    TABLE "employee_contacts" CONSTRAINT "employee_contacts_employee_id_fkey" FOREIGN KEY (employee_id) REFERENCES employees(employee_id)
                                      Table "public.employee_contacts"
     Column     |          Type          | Collation | Nullable |                     Default
----------------+------------------------+-----------+----------+--------------------------------------------------
 contact_id     | integer                |           | not null | nextval('employee_contacts_contact_id_seq'::regclass)
 employee_id    | integer                |           |          |
 phone_number   | character varying(20)  |           |          |
 email          | character varying(100) |           | not null |
Indexes:
    "employee_contacts_pkey" PRIMARY KEY, btree (contact_id)
    "employee_contacts_phone_number_key" UNIQUE CONSTRAINT, btree (phone_number)
Foreign-key constraints:
    "employee_contacts_employee_id_fkey" FOREIGN KEY (employee_id) REFERENCES employees(employee_id)

提示

  • 使用 CREATE TABLE 语句来创建表。
  • contact_id 列使用 SERIAL 数据类型,以便自动生成唯一的整数值。
  • 使用 PRIMARY KEY 约束来定义主键。
  • 使用 UNIQUE 约束来确保 phone_number 列包含唯一的值。
  • 使用 NOT NULL 约束来确保 email 列不包含 NULL 值。
  • 使用 FOREIGN KEY 约束在 employee_contacts 表的 employee_id 列与 employees 表的 employee_id 列之间建立外键关联。
  • 在执行 SQL 命令之前,记得使用 sudo -u postgres psql 连接到 PostgreSQL 数据库。
✨ 查看解决方案并练习

总结

在本次挑战中,任务是在指定环境中创建一个名为 employee_contacts 的 PostgreSQL 表。这涉及设计表结构,包括 contact_id(主键,自增)、employee_id(引用 employees 表的外键)、phone_number(唯一)和 email(非空)等列。

解决方案要求使用 psqlpostgres 用户身份连接到 PostgreSQL 数据库,然后直接执行必要的 SQL 命令来定义表及其约束,从而确保数据的完整性以及表与表之间的正确关联。