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


-- ============================================
-- БАЗА ДАННЫХ "ПРОКАТ АВТОМОБИЛЕЙ"
-- ============================================


-- 1. СТРАНА
CREATE TABLE [Страна]
(
    [Код страны] INT NOT NULL,
    [Название] VARCHAR(100) NOT NULL,

    CONSTRAINT [PK_Страна]
        PRIMARY KEY ([Код страны])
);


-- 2. ОФИС ПРОКАТА
CREATE TABLE [Офис проката]
(
    [Код офиса] INT NOT NULL,
    [Город] VARCHAR(100) NOT NULL,
    [Адрес] VARCHAR(200) NOT NULL,
    [Код страны] INT NOT NULL,

    CONSTRAINT [PK_ОфисПроката]
        PRIMARY KEY ([Код офиса]),

    CONSTRAINT [FK_Офис_Страна]
        FOREIGN KEY ([Код страны])
        REFERENCES [Страна]([Код страны])
);


-- 3. КЛИЕНТ
CREATE TABLE [Клиент]
(
    [Код клиента] INT NOT NULL,
    [Фамилия] VARCHAR(50) NOT NULL,
    [Имя] VARCHAR(50) NOT NULL,
    [Отчество] VARCHAR(50) NULL,
    [Город] VARCHAR(100) NOT NULL,
    [Адрес] VARCHAR(200) NOT NULL,
    [Водительское удостоверение] VARCHAR(30) NULL,
    [Код страны] INT NOT NULL,

    CONSTRAINT [PK_Клиент]
        PRIMARY KEY ([Код клиента]),

    CONSTRAINT [UQ_Клиент_ВУ]
        UNIQUE ([Водительское удостоверение]),

    CONSTRAINT [FK_Клиент_Страна]
        FOREIGN KEY ([Код страны])
        REFERENCES [Страна]([Код страны])
);


-- 4. КАТЕГОРИЯ
CREATE TABLE [Категория]
(
    [Код категории] INT NOT NULL,
    [Название] VARCHAR(100) NOT NULL,
    [Количество мест] INT NOT NULL,

    CONSTRAINT [PK_Категория]
        PRIMARY KEY ([Код категории])
);


-- 5. ДЕНЕЖНАЯ ЕДИНИЦА
CREATE TABLE [Денежная единица]
(
    [Код валюты] INT NOT NULL,
    [Название] VARCHAR(50) NOT NULL,
    [Код страны] INT NOT NULL,

    CONSTRAINT [PK_ДенежнаяЕдиница]
        PRIMARY KEY ([Код валюты]),

    CONSTRAINT [UQ_ДенежнаяЕдиница]
        UNIQUE ([Название], [Код страны]),

    CONSTRAINT [FK_Валюта_Страна]
        FOREIGN KEY ([Код страны])
        REFERENCES [Страна]([Код страны])
);


-- 6. ТРАНСПОРТНОЕ СРЕДСТВО
CREATE TABLE [Транспортное средство]
(
    [Код ТС] INT NOT NULL,
    [Код категории] INT NOT NULL,
    [Стоимость проката] DECIMAL(10,2) NOT NULL,
    [Марка] VARCHAR(50) NOT NULL,
    [Модель] VARCHAR(50) NOT NULL,
    [Цвет] VARCHAR(30) NOT NULL,
    [Состояние] VARCHAR(50) NOT NULL,
    [Код валюты] INT NOT NULL,

    CONSTRAINT [PK_ТранспортноеСредство]
        PRIMARY KEY ([Код ТС]),

    CONSTRAINT [FK_ТС_Категория]
        FOREIGN KEY ([Код категории])
        REFERENCES [Категория]([Код категории]),

    CONSTRAINT [FK_ТС_Валюта]
        FOREIGN KEY ([Код валюты])
        REFERENCES [Денежная единица]([Код валюты])
);


-- 7. ДОГОВОР АРЕНДЫ
CREATE TABLE [Договор аренды]
(
    [Номер договора] INT NOT NULL,
    [Код офиса] INT NOT NULL,
    [Код офиса сдачи] INT NULL,
    [Дата оформления] DATE NOT NULL,
    [Дата оплаты] DATE NULL,
    [Срок аренды] INT NOT NULL,
    [Дата начала аренды] DATE NOT NULL,
    [Фактическая дата окончания аренды] DATE NULL,
    [Менеджер] VARCHAR(100) NOT NULL,
    [Телефон] VARCHAR(20) NULL,
    [Договор аннулирован] BIT NOT NULL,
    [Код клиента] INT NOT NULL,
    [Код ТС] INT NOT NULL,

    CONSTRAINT [PK_ДоговорАренды]
        PRIMARY KEY ([Номер договора]),

    CONSTRAINT [FK_Договор_Офис]
        FOREIGN KEY ([Код офиса])
        REFERENCES [Офис проката]([Код офиса]),

    CONSTRAINT [FK_Договор_ОфисСдачи]
        FOREIGN KEY ([Код офиса сдачи])
        REFERENCES [Офис проката]([Код офиса]),

    CONSTRAINT [FK_Договор_Клиент]
        FOREIGN KEY ([Код клиента])
        REFERENCES [Клиент]([Код клиента]),

    CONSTRAINT [FK_Договор_ТС]
        FOREIGN KEY ([Код ТС])
        REFERENCES [Транспортное средство]([Код ТС])
);


-- 8. ДОПОЛНИТЕЛЬНЫЕ УСЛОВИЯ АРЕНДЫ
CREATE TABLE [Дополнительные условия аренды]
(
    [Номер записи] INT NOT NULL,
    [Условие] VARCHAR(255) NOT NULL,
    [Код валюты] INT NOT NULL,
    [Стоимость] DECIMAL(10,2) NOT NULL,

    CONSTRAINT [PK_ДопУсловия]
        PRIMARY KEY ([Номер записи]),

    CONSTRAINT [FK_ДопУсловия_Валюта]
        FOREIGN KEY ([Код валюты])
        REFERENCES [Денежная единица]([Код валюты])
);


-- 9. УТОЧНЕНИЕ ДОГОВОРА
CREATE TABLE [Уточнение договора]
(
    [Номер договора] INT NOT NULL,
    [Номер записи] INT NOT NULL,
    [Коэффициент] DECIMAL(6,2) NOT NULL,

    CONSTRAINT [PK_УточнениеДоговора]
        PRIMARY KEY ([Номер договора], [Номер записи]),

    CONSTRAINT [FK_Уточнение_Договор]
        FOREIGN KEY ([Номер договора])
        REFERENCES [Договор аренды]([Номер договора]),

    CONSTRAINT [FK_Уточнение_Условие]
        FOREIGN KEY ([Номер записи])
        REFERENCES [Дополнительные условия аренды]([Номер записи])
);


-- 10. ПЛАТЕЖНЫЙ ДОКУМЕНТ
CREATE TABLE [Платежный документ]
(
    [Номер документа] INT NOT NULL,
    [Номер договора] INT NOT NULL,
    [Тип документа] VARCHAR(50) NOT NULL,
    [Дата оплаты] DATE NOT NULL,
    [Сумма] DECIMAL(12,2) NOT NULL,
    [Код валюты] INT NOT NULL,

    CONSTRAINT [PK_ПлатежныйДокумент]
        PRIMARY KEY ([Номер документа]),

    CONSTRAINT [FK_Платеж_Договор]
        FOREIGN KEY ([Номер договора])
        REFERENCES [Договор аренды]([Номер договора]),

    CONSTRAINT [FK_Платеж_Валюта]
        FOREIGN KEY ([Код валюты])
        REFERENCES [Денежная единица]([Код валюты])
);


-- 11. КУРС ДЕНЕЖНОЙ ЕДИНИЦЫ
CREATE TABLE [Курс денежной единицы]
(
    [Номер записи] INT NOT NULL,
    [Код валюты] INT NOT NULL,
    [Дата] DATE NOT NULL,
    [Значение курса] DECIMAL(12,4) NOT NULL,

    CONSTRAINT [PK_КурсВалюты]
        PRIMARY KEY ([Номер записи]),

    CONSTRAINT [FK_Курс_Валюта]
        FOREIGN KEY ([Код валюты])
        REFERENCES [Денежная единица]([Код валюты])
);