/SQL

Primary LanguagePython

ТЗ:

  • Надо создать таблицы в бд (например postgres, mysql, или в любой другой БД установленной на вашем компьютере).

    Таблицы бд должны быть правильно спроектированы - так, как будто они создаются для реального бекенда магазина (нужны примерно 4 таблицы только под данные нужные для вывода данной задачи).

    Данные в таблицах не должны: дублироваться, не оптимальным образом потреблять дисковое пространство.

    Нужно чтобы в будущем на этой схеме бд можно было легко реализовать другой функционал, например показ списка заказов содержащих товар с id=5, или показ всех товаров, содержащих в названии поисковую фразу.

  • Сделать вручную insert into в эти таблицы, так чтобы там были такие данные, чтобы получилось в точности воспроизвести пример ниже.

  • Написать консольную программу. (например на go, или на другом языке который вы знаете).

На вход программе подаются номера заказов, для которых надо выдать товары по стеллажам.Программа должна выполняться эффективным образом. Не нагружать попусту процессор, и не использовать больше чем нужно оперативной памяти.

Данный проект представляет собой пример реализации базы данных и консольной программы для эффективной работы с заказами и товарами в интернет-магазине. Здесь описана структура базы данных, примеры таблиц, связей между ними, а также пример консольной программы для работы с этими данными.

Инструменты:

  • Python

Текст с описанием картинки

Таблица для сборки заказов. В данной таблице представленны :

  • rack ( Стеллаж )
  • product ( Товар )
  • order ( Заказ )

Связи между таблицами:

В базе данных существуют две основные связи:

  1. Многие-ко-многим
  2. Один-ко-многим
  • Связь "многие-ко-многим" реализуется через таблицы связей rack_product_link и order_product_link.

  • Таблицы rack_product_link и order_product_link содержат внешние ключи (FOREIGN KEY), ссылающиеся на идентификаторы записей в таблицах rack, product и ordert.

  • Таким образом, через таблицы связей можно установить связь между стеллажами и товарами, а также между заказами и товарами.

  • Связь "один-ко-многим" реализуется через внешние ключи (FOREIGN KEY) в таблицах rack_product_link и order_product_link, которые ссылается на записи в таблицах rack, product и ordert.

  • Например, в таблице rack_product_link каждая запись может ссылаться на один стеллаж и один товар, но на один стеллаж может ссылаться несколько записей в этой таблице.


Пример создание таблицы (product):

product_table_create = """
CREATE TABLE IF NOT EXISTS product (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
article INTEGER UNIQUE NOT NULL
)
"""

Пример создание таблицы (rack_product_link):

rack_product_link_create = """
CREATE TABLE IF NOT EXISTS rack_product_link (
id SERIAL PRIMARY KEY,
rack_id INTEGER NOT NULL,
product_id INTEGER NOT NULL,
main BOOLEAN NOT NULL,

CONSTRAINT FK_link_rack_product FOREIGN KEY(rack_id)
REFERENCES rack(id),

CONSTRAINT FK_link_product_rack FOREIGN KEY(product_id)
REFERENCES product(id)
)
"""

Структура проекта:

  • load_test_data.py: Файл отвечающий за загрузку тестовых данных в БД.

  • view.py: Файл , отвечающий за отображение данных пользователю.

  • models.py: Файл с описанием моделей БД.

  • database.py: Модуль для работы с базой данных.

  • settings.py: Настройки приложения.

Классы моделей:

BaseModel

BaseModel - абстрактный базовый класс для всех моделей. Он содержит метод get_by(), который позволяет получать экземпляры моделей из базы данных.

BaseModelLink

BaseModelLink - также абстрактный базовый класс, но для моделей, представляющих связи между сущностями. Он содержит метод get_all_by(), который возвращает все связанные экземпляры моделей по заданным критериям.

Rack

Rack - класс, представляющий стеллаж. Он содержит методы для получения стеллажей из базы данных по ID или имени.

Пример использования:

rack = Rack.get_by("id", 1)
print(rack)

Order

Order - класс, представляющий заказ. Он содержит методы для получения заказов из базы данных по ID или номеру заказа.

Пример использования:

order = Order.get_by("order_number", 12345)
print(order)

Product

Product - класс, представляющий товар. Он содержит методы для получения товаров из базы данных по ID или артикулу.

Пример использования:

product = Product.get_by("id", 1)
print(product)

OrderProductLink

OrderProductLink - класс, представляющий связь между заказом и продуктом. Он содержит методы для получения всех связей заказ-продукт по ID заказа или продукта.

Пример использования:

order_products = OrderProductLink.get_all_by("order_id", 1)
for order_product in order_products:
    print(order_product)

RackProductLink

RackProductLink - класс, представляющий связь между стеллажом и товаром. Он содержит методы для получения всех связей стеллаж-товар по ID стеллажа или товара.

Пример использования:

for rack_product in rack_products:
    print(rack_product)