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


USE user333_db;
GO

-- Удаление таблиц в обратном порядке связей для избежания конфликтов при перезапуске
DROP TABLE IF EXISTS Kurs_Denezhnoj_Edinicy;
DROP TABLE IF EXISTS Dopolnitelnye_Usloviya_Arendy;
DROP TABLE IF EXISTS Utochnenie_Dogovora;
DROP TABLE IF EXISTS Platezhnyj_Dokument;
DROP TABLE IF EXISTS Dogovor_Arendy;
DROP TABLE IF EXISTS Transportnoe_Sredstvo;
DROP TABLE IF EXISTS Denezhnaya_Edinica;
DROP TABLE IF EXISTS Klient;
DROP TABLE IF EXISTS Kategoriya;
DROP TABLE IF EXISTS Ofis_Prokata;
DROP TABLE IF EXISTS Strana;
GO

-- 1. Таблица: Страна
CREATE TABLE Strana (
    Kod_Strany INT IDENTITY(1,1) PRIMARY KEY,
    Nazvanie NVARCHAR(100) NOT NULL
);
GO

-- 2. Таблица: Офис проката
CREATE TABLE Ofis_Prokata (
    Kod_Ofisa INT IDENTITY(1,1) PRIMARY KEY,
    Gorod NVARCHAR(100) NOT NULL,
    Adres NVARCHAR(255) NOT NULL,
    Kod_Strany INT NOT NULL,
    CONSTRAINT FK_OfisProkata_Strana FOREIGN KEY (Kod_Strany) REFERENCES Strana(Kod_Strany)
);
GO

-- 3. Таблица: Категория
CREATE TABLE Kategoriya (
    Kod_Kategorii INT IDENTITY(1,1) PRIMARY KEY,
    Nazvanie NVARCHAR(100) NOT NULL,
    Kolichestvo_Mest INT NOT NULL
);
GO

-- 4. Таблица: Клиент
CREATE TABLE Klient (
    Kod_Klienta INT IDENTITY(1,1) PRIMARY KEY,
    Familiya NVARCHAR(100) NOT NULL,
    Imya NVARCHAR(100) NOT NULL,
    Otchestvo NVARCHAR(100) NULL,
    Gorod NVARCHAR(100) NOT NULL,
    Adres NVARCHAR(255) NOT NULL,
    Voditelskoe_Udostoverenie NVARCHAR(50) NOT NULL,
    Kod_Strany INT NOT NULL,
    CONSTRAINT AK_Klient_Voditelskoe UNIQUE (Voditelskoe_Udostoverenie), -- AK1.1
    CONSTRAINT FK_Klient_Strana FOREIGN KEY (Kod_Strany) REFERENCES Strana(Kod_Strany)
);
GO

-- 5. Таблица: Денежная единица
CREATE TABLE Denezhnaya_Edinica (
    Kod_Valyuty INT IDENTITY(1,1) PRIMARY KEY,
    Nazvanie NVARCHAR(50) NOT NULL,
    Kod_Strany INT NOT NULL,
    CONSTRAINT AK_Valyuta_Nazvanie UNIQUE (Nazvanie), -- AK1.1
    CONSTRAINT FK_Valyuta_Strana FOREIGN KEY (Kod_Strany) REFERENCES Strana(Kod_Strany) -- AK1.2 / FK
);
GO

-- 6. Таблица: Транспортное средство
CREATE TABLE Transportnoe_Sredstvo (
    Kod_TS INT IDENTITY(1,1) PRIMARY KEY,
    Kod_Kategorii INT NOT NULL,
    Stoimost_Prokata MONEY NOT NULL,
    Marka NVARCHAR(100) NOT NULL,
    Model NVARCHAR(100) NOT NULL,
    Cvet NVARCHAR(50) NOT NULL,
    Gosnomer NVARCHAR(20) NOT NULL,
    Kod_Valyuty INT NOT NULL,
    CONSTRAINT AK_TS_Gosnomer UNIQUE (Gosnomer), -- AK1.1
    CONSTRAINT FK_TS_Kategoriya FOREIGN KEY (Kod_Kategorii) REFERENCES Kategoriya(Kod_Kategorii),
    CONSTRAINT FK_TS_Valyuta FOREIGN KEY (Kod_Valyuty) REFERENCES Denezhnaya_Edinica(Kod_Valyuty)
);
GO

-- 7. Таблица: Договор аренды
CREATE TABLE Dogovor_Arendy (
    Nomer_Dogovora INT IDENTITY(1,1) PRIMARY KEY,
    
    -- Точки get. и return. из схемы заменены на разрешенные подчеркивания
    Get_Kod_Ofisa INT NOT NULL,     
    Return_Kod_Ofisa INT NOT NULL,  
    
    Data_Oformleniya DATE NOT NULL,
    Data_Oplaty DATE NULL,
    Srok_Arendy INT NOT NULL, 
    Data_Nachala_Arendy DATE NOT NULL,
    Fakticheskaya_Data_Okonchaniya_Arendy DATE NULL,
    Menedzher NVARCHAR(150) NOT NULL,
    Telefon NVARCHAR(20) NOT NULL,
    Dogovor_Annulirovan BIT NOT NULL DEFAULT 0,
    Kod_Klienta INT NOT NULL,
    Kod_TS INT NOT NULL,
    
    CONSTRAINT FK_Dogovor_OfisVydachi FOREIGN KEY (Get_Kod_Ofisa) REFERENCES Ofis_Prokata(Kod_Ofisa),
    CONSTRAINT FK_Dogovor_OfisVozvrata FOREIGN KEY (Return_Kod_Ofisa) REFERENCES Ofis_Prokata(Kod_Ofisa),
    CONSTRAINT FK_Dogovor_Klient FOREIGN KEY (Kod_Klienta) REFERENCES Klient(Kod_Klienta),
    CONSTRAINT FK_Dogovor_TS FOREIGN KEY (Kod_TS) REFERENCES Transportnoe_Sredstvo(Kod_TS)
);
GO

-- 8. Таблица: Платежный документ
CREATE TABLE Platezhnyj_Dokument (
    Nomer_Dokumenta INT PRIMARY KEY, -- По схеме вводится вручную (без автоинкремента)
    Tip_Dokumenta NVARCHAR(100) NOT NULL,
    Data_Oplaty DATE NOT NULL,
    Summa MONEY NOT NULL,
    Kod_Valyuty INT NOT NULL,
    CONSTRAINT FK_Platezh_Valyuta FOREIGN KEY (Kod_Valyuty) REFERENCES Denezhnaya_Edinica(Kod_Valyuty)
);
GO

-- 9. Таблица: Уточнение договора
CREATE TABLE Utochnenie_Dogovora (
    Nomer_Dogovora INT NOT NULL,
    Nomer_Zapisi INT NOT NULL,
    Koefficient DECIMAL(5,2) NOT NULL,
    PRIMARY KEY (Nomer_Dogovora, Nomer_Zapisi),
    CONSTRAINT FK_Utochnenie_Dogovor FOREIGN KEY (Nomer_Dogovora) REFERENCES Dogovor_Arendy(Nomer_Dogovora) ON DELETE CASCADE
);
GO

-- 10. Таблица: Дополнительные условия аренды
CREATE TABLE Dopolnitelnye_Usloviya_Arendy (
    Nomer_Zapisi INT IDENTITY(1,1) PRIMARY KEY,
    Uslovie NVARCHAR(MAX) NOT NULL,
    Kod_Valyuty INT NOT NULL,
    Stoimost MONEY NOT NULL,
    CONSTRAINT FK_DopUsloviya_Valyuta FOREIGN KEY (Kod_Valyuty) REFERENCES Denezhnaya_Edinica(Kod_Valyuty)
);
GO

-- 11. Таблица: Курс денежной единицы
CREATE TABLE Kurs_Denezhnoj_Edinicy (
    Nomer_Zapisi INT IDENTITY(1,1) PRIMARY KEY,
    In_Kod_Valyuty INT NOT NULL,  -- Входная валютная пара (1-я р.е.)
    For_Kod_Valyuty INT NOT NULL, -- Выходная валютная пара (2-я р.е.)
    Data DATE NOT NULL,
    Znachenie_Kursa DECIMAL(18,4) NOT NULL,
    CONSTRAINT AK_Kurs_Para_Data UNIQUE (In_Kod_Valyuty, For_Kod_Valyuty, Data), -- AK1.1
    CONSTRAINT FK_Kurs_ValyutaVhod FOREIGN KEY (In_Kod_Valyuty) REFERENCES Denezhnaya_Edinica(Kod_Valyuty),
    CONSTRAINT FK_Kurs_ValyutaVyhod FOREIGN KEY (For_Kod_Valyuty) REFERENCES Denezhnaya_Edinica(Kod_Valyuty)
);
GO