Контрольная работа №2. Вариант 2010-41

DROP TABLE AtmTransaction

DROP TABLE ATM

DROP TABLE CreditCard

DROP TABLE CreditHistory

DROP TABLE CreditType

DROP TABLE Account

DROP TABLE Client

GO

CREATE TABLE Client(

    id INT IDENTITY PRIMARY KEY,

    name VARCHAR(32),

    passport CHAR(12) UNIQUE,

    phone CHAR(10) UNIQUE,

    credit_limit NUMERIC(15,2) CHECK(credit_limit >= 0) -- кредитный лимит, максимально возможная сумма

                                                         -- открытых кредитов в каждый момент времени

)

       

CREATE TABLE Account(

    id INT IDENTITY PRIMARY KEY,

    num CHAR(20) UNIQUE,

    money_sum NUMERIC(15,2), -- остаток на счёте.

    client_id INT FOREIGN KEY REFERENCES Client(id))

-- Вы ожидаете, что клиенты будут каждый день выплачивать 1/length часть

-- от (сумма кредита + проценты за всю сумму за весь срок), то есть 1/length от (daily_rate+1)*length*сумма

CREATE TABLE CreditType(

        id INT PRIMARY KEY,

        name VARCHAR(20), -- название

        daily_rate  NUMERIC(3,2) CHECK (daily_rate > 0), -- процентная ставка кредита в день

        length INT CHECK (length > 0), -- срок кредита в днях

        UNIQUE (name, length))

CREATE TABLE CreditHistory(

        client_id INT FOREIGN KEY REFERENCES Client(id),

        credit_type_id INT FOREIGN KEY REFERENCES CreditType(id),

        money_sum NUMERIC(15,2),

        open_date DATETIME,

        real_close_date DATETIME)

CREATE TABLE CreditCard(

    id INT IDENTITY PRIMARY KEY,

    card_num CHAR(16) UNIQUE,

    account_id INT FOREIGN KEY REFERENCES Account(id))

   

CREATE TABLE ATM(

    id INT IDENTITY PRIMARY KEY,

    address VARCHAR(64))

   

CREATE TABLE AtmTransaction(

    id INT IDENTITY PRIMARY KEY,

    atm_id INT FOREIGN KEY REFERENCES ATM(id),

    card_id INT FOREIGN KEY REFERENCES CreditCard(id),

    money_sum NUMERIC (15, 2),

    timestamp DATETIME,

    UNIQUE (atm_id, card_id, timestamp))

       

-- 1 --

-- К вам пришёл клиент и просит кредит

-- Вы хотите проверить, способен ли он кредит вернуть. Вы смотрите на длительность

-- кредита, процентную ставку,уже взятые кредиты и накопления клиента за последнее время, равное 1/10 длительности кредита.

-- Если клиент превышает свой кредитный лимит то идёт в пень

-- Если у клиента за последнее время остаток на счету увеличился на сумму

-- большую, чем ему придётся заплатить за 1/10 кредитного срока(смотри комментарий к CreditType)

-- то все хорошо

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

-- то тоже всё хорошо

-- Иначе идёт в пень

-- CreditRequest(@client_id INT, @credit_type_id INT, @money_sum NUMERIC(15,2))

-- номер месяца можно получить функцией MONTH(), год (если надо) функцией YEAR():

-- MONTH('2010-12-16') = 12

-- Разницу дней между двумя датами можно посчитать функцией DATEDIFF:

-- DATEDIFF(day, '2010-12-09', '2010-12-16') = 7