Данная модель создавалась при помощи СУБД Microsoft SQL Server [2]. Рассмотрим особенности данной системы. Клиент владеет одной или несколькими картами, а по карте может совершаться одна или более транзакций (операций).
Рисунок 1. Таблица clients
Таблица «Клиенты» (рисунок 1) имеет 2 поля: client_id – уникальный идентификатор клиента, тип данных INT; full_name – полное имя клиента, тип данных VARCHAR(256). На поле client_id создан первичный ключ.
Рисунок 2. Таблица cards
Таблица «Карты» (рисунок 2) имеет 4 поля: card_id – уникальный идентификатор карты, тип данных INT; card_num – 16-значный номер карты, тип данных CHAR(16); client_id – поле для связи с таблицей «Клиенты», тип данных INT; expiration_date – срок действия карты, тип данных DATE. Первичный ключ на поле card_id.
Рисунок 3. Таблица transactions
Таблица «Транзакции» (рисунок 3) имеет 7 полей: trans_id – уникальный идентификатор транзакции, тип данных INT; card_id – поле для связи с таблицей «Карты», тип данных INT; trans_amount – сумма транзакции, тип данных DECIMAL(18, 2); trans_type -– тип транзакции (дебет, кредит), тип данных VARCHAR(20); trans_status – статус транзакции (принята или отказана), тип данных VARCHAR(20); trans_comm – комментарий к транзакции, поясняющая её статус, тип данных VARCHAR(256); trans_date – дата транзакции, тип данных DATE. Также на поле trans_id был создан первичный ключ.
Каждая информационная система должна обладать целостностью данных, то есть должно быть соответствие имеющейся в базе данных информации её внутренней логике, структуре и всем явно заданным правилам. Ограничением целостности является каждое правило, которое налагает некоторое ограничение на возможное состояние базы данных [1].
Для этого было принято решение создать триггер на операцию вставки в таблицу «Транзакции», который проверяет эти условия и в зависимости от их выполнения ставит соответствующий статус [3].
Рисунок 4. Отклонённая операция ввиду отрицательного баланса
В первую очередь триггер проверяет баланс карты, высчитывая предыдущие суммы операций по дебету и кредиту, и если баланс оказывается меньше 0, то транзакции ставится статус «REJECTED», а в комментарии указывается «Недостаточно средств» (рисунок 4).
Рисунок 5. Отклонённая операция ввиду недействительности карты
Затем триггер сверяет срок действия карты и дату транзакции, и если срок действия карты истёк, то также ставится статус транзакции «REJECTED», а в комментарии «Карта недействительна» (Рисунок 5).
Рисунок 6. Выполненная операция
Если же все условия для совершения транзакции выполняются, то выставляется статус «ACCEPTED», а в комментарии «Транзакция выполнена» (Рисунок 6).
Список литературы
- Habr [Электронный ресурс]. – Режим доступа: URL: https://www.habr.com/ (дата обращения: 19.06.2022).
- Документация Microsoft [Электронный ресурс]. – Режим доступа: URL: https://docs.microsoft.com/en-us/ (дата обращения: 19.06.2022).
- Форум Cyberforum [Электронный ресурс]. – Режим доступа: URL: https://www.cyberforum.ru/ (дата обращения: 19.06.2022).