Надо создать таблицы в базе данных postgres,
Таблицы базы данных должны быть правильно спроектированы – так, как будто они создаются для реального бекенда магазина (нужны примерно 4 таблицы только под данные нужные для вывода данной задачи).
Данные в таблицах не должны: дублироваться, не оптимальным образом потреблять дисковое пространство.
Нужно чтобы в будущем на этой схеме базы данных можно было легко реализовать другой функционал, например показ списка заказов содержащих товар с id=5, или показ всех товаров, содержащих в названии поисковую фразу.
sql
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price INTEGER NOT NULL,
description TEXT,
category_id INTEGER,
FOREIGN KEY (category_id) REFERENCES categories (id)
);
В данной таблице у нас есть следующие поля:
- id - уникальный идентификатор товара (автоинкрементируемое поле);
- name - название товара (строка, не может быть пустым);
- price - цена товара (целое число, не может быть пустым);
- description - описание товара (текстовое поле);
- category_id - идентификатор категории товара, который ссылается на поле id таблицы "categories" (внешний ключ).
2. Таблица "categories" для хранения информации о категориях товаров:
sql
CREATE TABLE categories (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
В данной таблице у нас есть следующие поля:
- id - уникальный идентификатор категории товара (автоинкрементируемое поле);
- name - название категории товара (строка, не может быть пустым).
3. Таблица "orders" для хранения информации о заказах:
sql
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
customer_name VARCHAR(255) NOT NULL,
order_date DATE NOT NULL,
total_price INTEGER NOT NULL
);
В данной таблице у нас есть следующие поля:
- id - уникальный идентификатор заказа (автоинкрементируемое поле);
- customer_name - имя заказчика (строка, не может быть пустым);
- order_date - дата заказа (дата, не может быть пустым);
- total_price - общая стоимость заказа (целое число, не может быть пустым).
4. Таблица "order_items" для хранения информации о товарах, входящих в заказы:
sql
CREATE TABLE order_items (
id SERIAL PRIMARY KEY,
order_id INTEGER NOT NULL,
product_id INTEGER NOT NULL,
quantity INTEGER NOT NULL,
FOREIGN KEY (order_id) REFERENCES orders (id),
FOREIGN KEY (product_id) REFERENCES products (id)
);
В данной таблице у нас есть следующие поля:
- id - уникальный идентификатор записи о товаре в заказе (автоинкрементируемое поле);
- order_id - идентификатор заказа, к которому относится товар, который ссылается на поле id таблицы "orders" (внешний ключ);
- product_id - идентификатор товара, который ссылается на поле id таблицы "products" (внешний ключ);
- quantity - количество товара в заказе (целое число, не может быть пустым).
Таким образом, мы создали 4 таблицы, которые позволят хранить информацию о товарах, категориях товаров, заказах и товарах в заказах. Таблицы связаны между собой с помощью внешних ключей, что позволит нам легко реализовывать различный функционал в будущем, например, получать список заказов, содержащих товар с определенным идентификатором или список товаров, содержащих определенную поисковую фразу в названии. Также заметим, что данные в таблицах не дублируются и не занимают излишнее дисковое пространство.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет