Загрузка данных


CREATE DATABASE ProkatAuto;
GO

USE ProkatAuto;
GO

-- Страна
CREATE TABLE Strana (
    KodStrany INT PRIMARY KEY IDENTITY(1,1),
    Nazvanie NVARCHAR(100) NOT NULL
);

-- Валюта
CREATE TABLE Valuta (
    KodValuty INT PRIMARY KEY IDENTITY(1,1),
    Nazvanie NVARCHAR(50) NOT NULL UNIQUE,
    KodStrany INT NOT NULL,
    FOREIGN KEY (KodStrany) REFERENCES Strana(KodStrany)
);

-- Офис проката
CREATE TABLE OfficeProkata (
    KodOfisa INT PRIMARY KEY IDENTITY(1,1),
    Gorod NVARCHAR(100) NOT NULL,
    Adres NVARCHAR(200) NOT NULL,
    KodStrany INT NOT NULL,
    FOREIGN KEY (KodStrany) REFERENCES Strana(KodStrany)
);

-- Категория автомобилей
CREATE TABLE Kategoriya (
    KodKategorii INT PRIMARY KEY IDENTITY(1,1),
    Nazvanie NVARCHAR(100) NOT NULL,
    KolichestvoMest INT NOT NULL
);

-- Транспортное средство
CREATE TABLE TransportnoeSredstvo (
    KodTS INT PRIMARY KEY IDENTITY(1,1),
    KodKategorii INT NOT NULL,
    StoimostProkata DECIMAL(10,2) NOT NULL,
    Marka NVARCHAR(50) NOT NULL,
    Model NVARCHAR(50) NOT NULL,
    Cvet NVARCHAR(30),
    GosNomer NVARCHAR(20) UNIQUE NOT NULL,
    KodValuty INT NOT NULL,

    FOREIGN KEY (KodKategorii)
        REFERENCES Kategoriya(KodKategorii),

    FOREIGN KEY (KodValuty)
        REFERENCES Valuta(KodValuty)
);

-- Клиент
CREATE TABLE Klient (
    KodKlienta INT PRIMARY KEY IDENTITY(1,1),
    Familiya NVARCHAR(50) NOT NULL,
    Imya NVARCHAR(50) NOT NULL,
    Otchestvo NVARCHAR(50),
    Gorod NVARCHAR(100),
    Adres NVARCHAR(200),
    VoditelskoeUdostoverenie NVARCHAR(30) UNIQUE NOT NULL,
    KodStrany INT NOT NULL,

    FOREIGN KEY (KodStrany)
        REFERENCES Strana(KodStrany)
);

-- Договор аренды
CREATE TABLE DogovorArendy (
    NomerDogovora INT PRIMARY KEY IDENTITY(1,1),

    GetKodOfisa INT NOT NULL,
    ReturnKodOfisa INT NOT NULL,

    DataOformleniya DATE NOT NULL,
    DataOplaty DATE,
    SrokArendy INT NOT NULL,

    DataNachalaArendy DATE NOT NULL,
    PredpolagaemayaDataOkonchaniya DATE NOT NULL,

    Menedzher NVARCHAR(100),
    Telefon NVARCHAR(20),

    DogovorAnnulirovan BIT DEFAULT 0,

    KodKlienta INT NOT NULL,
    KodTS INT NOT NULL,

    FOREIGN KEY (GetKodOfisa)
        REFERENCES OfficeProkata(KodOfisa),

    FOREIGN KEY (ReturnKodOfisa)
        REFERENCES OfficeProkata(KodOfisa),

    FOREIGN KEY (KodKlienta)
        REFERENCES Klient(KodKlienta),

    FOREIGN KEY (KodTS)
        REFERENCES TransportnoeSredstvo(KodTS)
);

-- Дополнительные условия аренды
CREATE TABLE DopolnitelnyeUsloviyaArendy (
    NomerZapisi INT PRIMARY KEY IDENTITY(1,1),
    Uslovie NVARCHAR(255) NOT NULL,
    KodValuty INT NOT NULL,
    Stoimost DECIMAL(10,2) NOT NULL,

    FOREIGN KEY (KodValuty)
        REFERENCES Valuta(KodValuty)
);

-- Уточнение договора
CREATE TABLE UtochnenieDogovora (
    NomerDogovora INT NOT NULL,
    NomerZapisi INT NOT NULL,
    Koefficient DECIMAL(10,2) NOT NULL,

    PRIMARY KEY (NomerDogovora, NomerZapisi),

    FOREIGN KEY (NomerDogovora)
        REFERENCES DogovorArendy(NomerDogovora),

    FOREIGN KEY (NomerZapisi)
        REFERENCES DopolnitelnyeUsloviyaArendy(NomerZapisi)
);

-- Платежный документ
CREATE TABLE PlatezhnyiDokument (
    NomerDokumenta INT PRIMARY KEY IDENTITY(1,1),

    NomerDogovora INT NOT NULL,
    TipDokumenta NVARCHAR(50) NOT NULL,
    DataOplaty DATE NOT NULL,
    Summa DECIMAL(12,2) NOT NULL,
    KodValuty INT NOT NULL,

    FOREIGN KEY (NomerDogovora)
        REFERENCES DogovorArendy(NomerDogovora),

    FOREIGN KEY (KodValuty)
        REFERENCES Valuta(KodValuty)
);

-- Курс денежной единицы
CREATE TABLE KursDenegnoiEdinitsy (
    NomerZapisi INT PRIMARY KEY IDENTITY(1,1),

    InKodValuty INT NOT NULL,
    ForKodValuty INT NOT NULL,

    Data DATE NOT NULL,
    ZnachenieKursa DECIMAL(18,6) NOT NULL,

    FOREIGN KEY (InKodValuty)
        REFERENCES Valuta(KodValuty),

    FOREIGN KEY (ForKodValuty)
        REFERENCES Valuta(KodValuty)
);