はじめに
このチャレンジでは、PostgreSQL で従業員の連絡先詳細を保存するための employee_contacts テーブルを設計・作成し、適切なデータ型と制約を通じてデータの整合性を確保します。すでに employees テーブルが存在する構成済みの環境で作業を進めます。
あなたのタスクは、psql を使用して postgres ユーザーとして PostgreSQL データベースに接続し、SQL コマンドを直接実行して employee_contacts テーブルを作成することです。このテーブルには、contact_id(主キー、自動インクリメント)、employee_id(employees テーブルを参照する外部キー)、phone_number(一意)、および email(NOT NULL)の各カラムを含める必要があります。
従業員テーブルの作成
適切なデータ型と制約を使用してデータの整合性を確保しながら、従業員の連絡先詳細を保存するためのテーブルを設計してください。
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(NOT NULL)のカラムを含めてください。 employee_idカラムが、employeesテーブルのemployee_idカラムを正しく参照していることを確認してください。
要件
contact_idカラムは、自動インクリメントされる主キー(Primary Key)であること。phone_numberカラムは、一意(Unique)であること。emailカラムは、NULL値を許可しない(Not Null)こと。employee_idカラムは、employeesテーブルを参照する外部キー(Foreign Key)であること。psqlを使用して SQL コマンドを実行すること。
例
employees テーブルと employee_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制約を使用します。 phone_numberカラムに重複した値が入らないようにするには、UNIQUE制約を使用します。emailカラムに空の値を許可しないようにするには、NOT NULL制約を使用します。employee_contactsテーブルのemployee_idとemployeesテーブルのemployee_idの間にリレーションシップを作成するには、FOREIGN KEY制約を使用します。- SQL コマンドを実行する前に、
sudo -u postgres psqlを使用して PostgreSQL データベースに接続することを忘れないでください。
まとめ
このチャレンジでは、指定された環境内で employee_contacts という名前の PostgreSQL テーブルを作成しました。これには、contact_id(主キー、自動インクリメント)、employee_id(employees テーブルを参照する外部キー)、phone_number(一意)、および email(NOT NULL)のカラムを持つテーブル構造の設計が含まれます。
解決には、psql を使用して postgres ユーザーとして PostgreSQL データベースに接続し、必要な SQL コマンドを直接実行してテーブルとその制約を定義し、データの整合性とテーブル間の適切なリレーションシップを確保することが求められました。


