Создайте customers первой, затем purchases с customer_id INTEGER NOT NULL REFERENCES customers(id). Первичные ключи SERIAL обеспечат автогенерацию идентификаторов в PostgreSQL.
Определение схемы таблиц для клиентов и их заказов
Создайте customers первой, затем purchases с customer_id INTEGER NOT NULL REFERENCES customers(id). Первичные ключи SERIAL обеспечат автогенерацию идентификаторов в PostgreSQL.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Сформулировать SQL‑операторы, создающие две таблицы.
Таблица customers:
- id — уникальный идентификатор (PRIMARY KEY, автогенерация, SERIAL).
- name — имя клиента (TEXT, NOT NULL).
Таблица purchases:
- id — уникальный идентификатор заказа (PRIMARY KEY, автогенерация, SERIAL).
- customer_id — внешний ключ, указывающий на таблицу customers (INTEGER, NOT NULL).
- purchase_date — дата оформления заказа (TIMESTAMP, NOT NULL).
Внешний ключ customer_id должен ссылаться на поле id таблицы customers.
Ответ
Создайте customers первой, затем purchases с customer_id INTEGER NOT NULL REFERENCES customers(id). Первичные ключи SERIAL обеспечат автогенерацию идентификаторов в PostgreSQL.
DDL по заданному контракту:
CREATE TABLE customers (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL
);
CREATE TABLE purchases (
id SERIAL PRIMARY KEY,
customer_id INTEGER NOT NULL REFERENCES customers(id),
purchase_date TIMESTAMP NOT NULL
);
CREATE INDEX purchases_customer_id_idx
ON purchases (customer_id);
Индекс на внешнем ключе полезен для поиска заказов клиента; сам FOREIGN KEY автоматически такой индекс в PostgreSQL не создаёт. Удаление клиента с заказами будет отклонено: каскадное удаление условием не задано. TIMESTAMP здесь хранит дату и время без часового пояса.