Добавил:
хачю сдать сессию Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

04_пример проекта_2

.pdf
Скачиваний:
1
Добавлен:
09.07.2025
Размер:
2.21 Mб
Скачать

) tablespace BAKERY;

CREATE TABLE PRODUCTS ( ID_products int PRIMARY KEY, Name_products varchar(150) NOT NULL, Category_products varchar(150) NOT NULL, Unit_products varchar(50) NULL, Price_products int NOT NULL

) tablespace BAKERY;

CREATE TABLE EXPENSES (

ID_expenses int PRIMARY KEY,

ID_products int NOT NULL,

ID_raw int NOT NULL,

Raw_requested double NOT NULL,

FOREIGN KEY ID_products REFERENCES PRODUCTS,

FOREIGN KEY ID_raw REFERENCES RAW

) tablespace BAKERY;

CREATE TABLE RAW (

ID_raw int PRIMARY KEY,

Name_raw varchar(50) NOT NULL,

Price_raw int NOT NULL,

Unit_raw varchar(50) NULL

) tablespace BAKERY;

CREATE TABLE SUPPLY ( ID_supply int PRIMARY KEY, ID_provider int NOT NULL,

ID_raw int NOT NULL,

41

SupplyDate date NULL,

RawNum_supply int NOT NULL,

Contract_supply varchar(25) NOT NULL UNIQUE,

FOREIGN KEY ID_provider REFERENCES PROVIDER,

FOREIGN KEY ID_raw REFERENCES RAW

) tablespace BAKERY;

CREATE TABLE PROVIDER (

ID_provider int PRIMARY KEY,

Name_provider varchar(250) NOT NULL,

INN_provider varchar(12) NOT NULL UNIQUE, Address_provider varchar(250) NOT NULL, Telephone_provider varchar(12) NOT NULL UNIQUE ) tablespace BAKERY;

3.5 Ограничения, представления, запросы

Ограничения (CHECK)

Для реализации ограничений на информацию использованы триггеры и

ограничения.

Требовалось предусмотреть следующие ограничения на информацию:

ИНН поставщика должно быть ровно 12 символов и содержать только цифры от 0 до 9;

ИНН покупателя должно быть ровно 12 символов и содержать только цифры от 0 до 9;

дата поставки не может быть позже текущей даты;

дата отгрузки не может быть позже текущей даты.

Ограничения были реализованы с помощью проверочных ограничений.

42

ИНН покупателя должно быть ровно 12 символов и содержать только цифры от 0 до 9:

ALTER TABLE BUYER ADD CONSTRAINT BINN CHECK(INN_buyer

LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]');

ИНН поставщика должно быть ровно 12 символов и содержать только цифры от 0 до 9:

ALTER TABLE PROVIDER ADD CONSTRAINT PINN CHECK(INN_provider LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0- 9][0-9]');

Дата отгрузки не может быть позже текущей даты:

ALTER TABLE SALE ADD CONSTRAINT Shipping

CHECK(SHIPPINGDATE<=CURDATE());

Дата поставки не может быть позже текущей даты:

ALTER TABLE SUPPLY ADD CONSTRAINT SupplyD

CHECK(SUPPLYDATE<=CURDATE());

Представления (CREATE VIEW)

Необходимо вывести отчет для технологов об изготовлении продукции,

чтобы было отображено из какого сырья производится товар.

CREATE VIEW tovar (Name_products, Category_products, Unit_products, Name_raw, Unit_raw, Raw_requested) AS

SELECT PRODUCTS.Name_products AS “Наименование продукции”, PRODUCTS.Category_products AS “Категория”, PRODUCTS.Unit_products AS

“Ед.изм.”, RAW.Name_raw AS “Наименования сырья”, RAW.Unit_raw AS

“Ед.изм.”, EXPENSES.Raw_requested AS “Количество сырья”

FROM PRODUCTS, RAW, EXPENSES

WHERE PRODUCTS.ID_products=EXPENSES.ID_products AND

EXPENSES.ID_raw=RAW.ID_raw;

43

Необходимо вывести отчет для бухгалтерии, сколько было отгрузок за ноябрь 2022 года.

CREATE VIEW otgruzka (Name_products, Category_products, Unit_products, Price_products, ShippingDate, Quantity_sale) AS

SELECT PRODUCTS.Name_products AS “Наименование продукции”, PRODUCTS.Category_products AS “Категория”, PRODUCTS.Unit_products AS “Ед.изм.”, PRODUCTS.Price_products AS “Цена”, SALE.Quantity_sale AS “Количество”, SALE.ShippingDate AS “Дата”, BUYER.Name_buyer AS “Покупатель”)

FROM PRODUCTS, SALE, BUYER

WHERE PRODUCTS.ID_products=SALE.ID_products AND

SALE.ID_buyer=BUYER.ID_buyer;

Запросы

Запрос 1. Обновление (UPDATE)

Пусть в БД необходимо внести следующие изменения – увеличить цену на белый хлеб на 10 рублей.

INSERT INTO PRODUCTS VALUES (‘5’,’Хлеб белый’, ‘Хлебобулочные изделия’, ‘шт’, ‘32’);

COMMIT;

UPDATE PRODUCTS

SET Price_products=Price_products+10

WHERE Name_products in ’Хлеб белый’;

COMMIT;

Запрос 2. Удаление (DELETE)

Пусть в БД необходимо удалить поставщика «Greenformula», т.к.

Хлебозавод перестал с ним сотрудничать.

DELETE FROM PROVIDER

WHERE Name_provider=’Greenformula’;

44

COMMIT;

Запрос 3. ORDER BY

Запрос к таблице, в результате которого отображаются все записи о поставках Greenformula (ID=5) с сортировкой по датам поставок в убывающем порядке:

SELECT *

FROM SUPPLY

WHERE ID_provider=5

ORDER BY SupplyDate DESC;

Запрос 4. ORDER BY

Запрос к таблице, в результате которого отображаются все записи о произведенном товаре 5 февраля 2022 года с сортировкой по количеству произведенного товара в возрастающем порядке:

SELECT *

FROM PRODUCTION

WHERE Date_production=’05-02-2022’

ORDER BY Quantity ASC;

Запрос 5. GROUP BY

Запрос к таблице, в результате которого отображаются минимальная и максимальная цена каждой категории товара, измеряемая поштучно:

SELECT Category_products, MIN(Price_products), MAX(Price_products)

FROM PROPUCTS

WHERE Unit_products=’шт’

GROUP BY Category_products;

Запрос 6. HAVING

45

Запрос к таблице, в результате которого отображаются минимальная и максимальная цена каждой категории товара, измеряемая поштучно, которые были проданы более 1000 штук за раз:

SELECT Category_products, MIN(Price_products), MAX(Price_products)

FROM PRODUCTS

WHERE Unit_products=’шт’ AND

SALE.ID_products=PRODUCTS.ID_products

GROUP BY Category_products

HAVING Quantity_sale>1000;

Запрос 7

Запрос к таблице, который выводит список всех покупателей:

SELECT *

FROM BUYER;

Запрос 8

Запрос к таблице, который выводит информацию о поставках и их поставщиках:

SELECT ID_supply, SupplyDate, RawNum_supply, Contract_supply,

Name_provider

FROM PROVIDER, SUPPLY

WHERE PROVIDER.ID_provider=SUPPLY.ID_provider;

Запрос 9

Посчитать доход от продаж за 5 февраля 2022 года. SELECT SUM(Quantity_sale*Price_products) FROM SALE, PRODUCTS

WHERE SALE.ID_products=PRODUCTS.ID_products AND

ShippingDate=’05-02-2022’;

46

Запрос 10

Выдать продажи за ноябрь 2022 года, среди которых нет выпечки.

SELECT ID_sale

FROM SALE

WHERE ShippingDate between to_date(’01-11-2022’, ‘DD-MM-YYYY’) and to_date(’30-11-2022’, ‘DD-MM-YYYY’)

MINUS

SELECT ID_sale

FROM SALE

WHERE SALE.ID_products=PRODUCTS.ID_products AND

PRODUCTS.Category_products=’Выпечка’;

Запрос 11. Подзапрос

Вывести продукцию, цена которой выше средней по ее категории:

SELECT ID_products, Name_products, Price_products, Category_products FROM PRODUCTS p

WHERE Price_products > SELECT (AVG(Price_products)

FROM PRODUCTS

WHERE

p.Category_products=Category_products ORDER BY Category_products;

47

4. Разработка программного обеспечения

4.1 Выбор СУБД

Для программной реализации информационной системы выбрана СУБД

Oracle Database 11g. Эта СУБД бесплатна для некоммерческого использования,

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

СУБД Oracle Database 11g – это:

комплексное решение для управления данными, которое поддерживает все популярные среды разработки приложений, имеющиеся на сегодняшний день.

единое интегрированное решение, для управления информацией,

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

но и документы, XML, мультимедиа информация о размещении данных.

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

СУБД, которая предоставляет возможность автоматической настройки

иуправления, что делает ее использование простым и экономически выгодным.

4.2 Описание интерфейса программирования

Работа по создании автоматизированной системы проводится в среде программирования SQL Developer.

Oracle SQL Developer графический инструментарий, который повышает производительность разработки приложений и упрощает задачи при разработке баз данных. Созданное специально для разработчиков баз в среде Oracle, данное

48

решение упрощает цикл разработки и сокращает потребность в покупке стороннего ПО для разработки и отладки кода в SQL и PL/SQL.

4.3 Политика безопасности

Если рассматривать средства обеспечения безопасности к базе данных,

хранения информации и передачи по сети, то сегодня явный лидер рынка систем управления базами данных СУБД Oracle. Она предоставляет разработчикам ПО и администраторам прикладных систем полный спектр средств и инструментов, необходимых для построения защищенных систем. Среди них стоит выделить следующие:

Virtual Private Database (VPD) средства разграничения доступа к данным на уровне строк и колонок, и возможность организации работы пользователя только с виртуальной регламентированной частью данных, а не с реальной базой данных;

Oracle Advanced Security комплекс средств аутентификации и обеспечения сетевой безопасности, включающий в себя поддержку защищенных протоколов передачи данных, в том числе SSL;

Oracle Label Security (OLS) средства, аналогичные VPD, но с возможностью проверки уровня доступа пользователя;

Fine Grained Audit Control (FGAC) инструмент подробного аудита.

Средства безопасности можно разделить на две категории:

безопасность данных;

безопасность доступа.

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

49

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

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

С нашей базой данных взаимодействуют следующие группы пользователей (соотносятся с указанными в п.2.3 АРМ):

генеральный директор;

логист;

бухгалтер;

экономист;

маркетинг;

инженер;

специалист по кадрам;

специалист по контролю качества;

специалист по закупкам;

специалист по продажам.

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

Для создания пользователя необходимо использовать CREATE USER:

CREATE USER ‘admin’ IDENTIFIED BY ‘password’;

Для наделения его правами – GRANT:

GRANT ALL ON bakery.* TO ‘admin’;

50