пятница, 4 июля 2025 г.

Otus, HomeWork, 25.07.01

Otus, HomeWork, 25.07.01

Create Tables Create_Shop2.sql

D:\VC25\Otus\CS\Projects\Shop\Scripts\

---------------------------------------------------------------------------------------------------

USE Shop3


-- Create Tables


-- Таблица Products

CREATE TABLE Products (

    ProductID INT IDENTITY(1,1) PRIMARY KEY,

    ProductName NVARCHAR(255) NOT NULL,

    Description NVARCHAR(MAX),

    Price NUMERIC(10, 2) NOT NULL CONSTRAINT CK_Product_Price CHECK (Price > 0),

    QuantityInStock INT NOT NULL CONSTRAINT CK_Product_Qty CHECK (QuantityInStock >= 0)

);

Go

-- Таблица Users

CREATE TABLE Users (

    UserID INT IDENTITY(1,1) PRIMARY KEY,

    UserName NVARCHAR(255) NOT NULL,

    Email NVARCHAR(255) UNIQUE NOT NULL,

    RegistrationDate DATETIME DEFAULT GETDATE()

);

Go

-- Таблица Orders

CREATE TABLE Orders (

    OrderID INT IDENTITY(1,1) PRIMARY KEY,

    UserID INT FOREIGN KEY REFERENCES Users(UserID),

    OrderDate DATETIME DEFAULT GETDATE(),

    Status NVARCHAR(50) NOT NULL

);

Go


-- Таблица OrderDetails

CREATE TABLE OrderDetails (

    OrderDetailID INT IDENTITY(1,1) PRIMARY KEY,

    OrderID INT FOREIGN KEY REFERENCES Orders(OrderID),

    ProductID INT FOREIGN KEY REFERENCES Products(ProductID),

    Quantity INT NOT NULL CONSTRAINT CK_OrderDetails_Quantity CHECK (Quantity > 0),

    TotalCost NUMERIC(10, 2) NOT NULL CONSTRAINT CK_OrderDetails_TotalCost CHECK (TotalCost > 0)

);

GO

-- ------------------------------------------------------

--USE Shop3

DELETE FROM Products


INSERT INTO Products (ProductName, Description, Price, QuantityInStock)

VALUES

('jackson usa', 'USA Signature guitars', 1500.00, 20),

('Gibson LP', 'Gibson Les Paul Tribute', 2000.00, 15),

('Schecter Plat', 'Schecter Platinium', 1000.00, 30),

('Fender Am', 'Fender American Professional', 2500.00, 10),

('Ibanez 550', 'Ibanez RG550', 2600.00, 42),

('Gibson SG', 'Gibson SG Standard', 800.00, 40),

('Schecter BJ', 'Schecter Black Jack', 1200.00, 26),

('Schecter Reaper', 'Schecter Reaper usa', 1400.00, 42);

GO


DELETE FROM Users

GO


INSERT INTO Users (UserName, Email)

VALUES

('Rony James Dio', 'rony@jamesdio.com'),

('Janis Joplin', 'janis@joplin.com');

GO

-----------------------------------------------------------

--USE Shop3


DELETE FROM Orders


INSERT INTO Orders (UserID, Status)

VALUES

(1, 'pending'), 

(1, 'completed'), 

(1, 'completed');


go


INSERT INTO Orders (UserID, Status)

VALUES

(2, 'pending'), 

(2, 'completed');


go


DELETE FROM OrderDetails


INSERT INTO OrderDetails (OrderID, ProductID, Quantity, TotalCost)

VALUES

(1, 1, 2, 10), 

(1, 2, 1, 10), 

(2, 3, 3, 10),

(2, 4, 5, 10),

(3, 5, 1,10),

(4, 6, 3,10),

(5, 7, 5, 10),

(5, 8, 1, 10);


go


--USE Shop3


SELECT TOP (1000)

    O.[OrderID],

    U.[UserID],

    U.[UserName],

    U.[Email],

    U.[RegistrationDate],

    O.[OrderDate],

    O.[Status],

    OD.[OrderDetailID],

    OD.[ProductID],

    OD.[Quantity],

    OD.[TotalCost],

    P.[ProductName],

    P.[Description],

    P.[Price],

    P.[QuantityInStock]

FROM 

    [dbo].[Orders] AS O

INNER JOIN 

    [dbo].[Users] AS U ON O.[UserID] = U.[UserID]

INNER JOIN 

    [dbo].[OrderDetails] AS OD ON O.[OrderID] = OD.[OrderID]

INNER JOIN 

    [dbo].[Products] AS P ON OD.[ProductID] = P.[ProductID];


GO


Otus, HomeTask, 25.07.01

Otus, HomeTask, 25.07.01

Домашнее задание

Создание виртуальной базы данных магазина в PostgreSQL

Цель:

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


Описание/Пошаговая инструкция выполнения домашнего задания:

Спроектируйте и создайте структуру базы данных для виртуального магазина, следуя этому плану:

  1. Таблица "Products" (Продукты):
  • ProductID (Основной ключ)
  • ProductName (Название продукта)
  • Description (Описание)
  • Price (Цена)
  • QuantityInStock (Количество на складе)


  1. Таблица "Users" (Пользователи):
  • UserID (Основной ключ)
  • UserName (Имя пользователя)
  • Email (Электронная почта)
  • RegistrationDate (Дата регистрации)


  1. Таблица "Orders" (Заказы):
  • OrderID (Основной ключ)
  • UserID (Внешний ключ)
  • OrderDate (Дата заказа)
  • Status (Статус)


  1. Таблица "OrderDetails" (Детали заказа):
  • OrderDetailID (Основной ключ)
  • OrderID (Внешний ключ)
  • ProductID (Внешний ключ)
  • Quantity (Количество)
  • TotalCost (Общая стоимость)


  1. Установление связей:
  • Связь между "Users" и "Orders"
  • Связь между "Orders" и "OrderDetails"
  • Связь между "Products" и "OrderDetails"


  1. SQL запросы:
  • Добавление нового продукта
  • Обновление цены продукта
  • Выбор всех заказов определенного пользователя
  • Расчет общей стоимости заказа
  • Подсчет количества товаров на складе
  • Получение 5 самых дорогих товаров
  • Список товаров с низким запасом (менее 5 штук)


Критерии оценки:

Создание таблиц "Products" и "Users": 2 балла
Создание таблиц "Orders" и "OrderDetails": 2 балла
Установление связей между таблицами: 1 балл
Добавление нового продукта и обновление цены продукта: 1 балл
Выбор всех заказов определенного пользователя и расчет общей стоимости заказа: 1 балл
Подсчет товаров на складе и получение 5 самых дорогих товаров: 2 балла
Список товаров с низким запасом: 1 балл

Минимальное количество баллов для выполнения задания: 6 баллов.


Компетенции:
  • Работа с базами данных
    • - создавать реляционную базу данных PostgreSQL
    • - писать скрипты создания таблиц

Рекомендуем сдать до: 07.07.2025