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


-- =====================================================
-- База данных "Прокат автомобилей" (схема со стр. 122-123)
-- =====================================================
CREATE DATABASE [car-rental-mssql];
GO

USE [car-rental-mssql];
GO


-- 1. Страна
CREATE TABLE [Страна] (
    [Код страны]   INT             IDENTITY(1,1) NOT NULL,
    [Название]     NVARCHAR(100)   NOT NULL,
    CONSTRAINT [PK_Страна] PRIMARY KEY CLUSTERED ([Код страны] ASC)
);
GO


-- 2. Денежная единица
CREATE TABLE [Денежная единица] (
    [Код валюты]   INT             IDENTITY(1,1) NOT NULL,
    [Название]     NVARCHAR(100)   NOT NULL,
    [Код страны]   INT             NULL,
    CONSTRAINT [PK_Денежная единица] PRIMARY KEY CLUSTERED ([Код валюты] ASC),
    CONSTRAINT [UQ_Денежная единица_Название] UNIQUE ([Название]),
    CONSTRAINT [FK_Денежная единица_Страна] FOREIGN KEY ([Код страны])
        REFERENCES [Страна] ([Код страны])
);
GO


-- 3. Курс денежной единицы
CREATE TABLE [Курс денежной единицы] (
    [Номер записи]     INT             IDENTITY(1,1) NOT NULL,
    [in_Код валюты]    INT             NULL,   -- исходная валюта
    [for_Код валюты]   INT             NULL,   -- в какую переводим
    [Дата]             DATE            NULL,
    [Значение курса]   DECIMAL(18,4)   NULL,
    CONSTRAINT [PK_Курс денежной единицы] PRIMARY KEY CLUSTERED ([Номер записи] ASC),
    CONSTRAINT [FK_Курс_in]  FOREIGN KEY ([in_Код валюты])
        REFERENCES [Денежная единица] ([Код валюты]),
    CONSTRAINT [FK_Курс_for] FOREIGN KEY ([for_Код валюты])
        REFERENCES [Денежная единица] ([Код валюты])
);
GO


-- 4. Клиент
CREATE TABLE [Клиент] (
    [Код клиента]               INT             IDENTITY(1,1) NOT NULL,
    [Фамилия]                   NVARCHAR(100)   NOT NULL,
    [Имя]                       NVARCHAR(100)   NOT NULL,
    [Отчество]                  NVARCHAR(100)   NULL,
    [Город]                     NVARCHAR(100)   NULL,
    [Адрес]                     NVARCHAR(255)   NULL,
    [Водительское удостоверение] NVARCHAR(50)   NOT NULL,
    [Код страны]                INT             NULL,
    CONSTRAINT [PK_Клиент] PRIMARY KEY CLUSTERED ([Код клиента] ASC),
    CONSTRAINT [UQ_Клиент_ВУ] UNIQUE ([Водительское удостоверение]),
    CONSTRAINT [FK_Клиент_Страна] FOREIGN KEY ([Код страны])
        REFERENCES [Страна] ([Код страны])
);
GO


-- 5. Офис проката
CREATE TABLE [Офис проката] (
    [Код офиса]   INT             IDENTITY(1,1) NOT NULL,
    [Город]       NVARCHAR(100)   NULL,
    [Адрес]       NVARCHAR(255)   NULL,
    [Код страны]  INT             NULL,
    CONSTRAINT [PK_Офис проката] PRIMARY KEY CLUSTERED ([Код офиса] ASC),
    CONSTRAINT [FK_Офис проката_Страна] FOREIGN KEY ([Код страны])
        REFERENCES [Страна] ([Код страны])
);
GO


-- 6. Категория
CREATE TABLE [Категория] (
    [Код категории]      INT             IDENTITY(1,1) NOT NULL,
    [Название]           NVARCHAR(100)   NOT NULL,
    [Количество мест]    INT             NULL,
    CONSTRAINT [PK_Категория] PRIMARY KEY CLUSTERED ([Код категории] ASC),
    CONSTRAINT [UQ_Категория_Название] UNIQUE ([Название])
);
GO


-- 7. Транспортное средство
CREATE TABLE [Транспортное средство] (
    [Код ТС]              INT             IDENTITY(1,1) NOT NULL,
    [Код категории]       INT             NULL,
    [Стоимость проката]   DECIMAL(18,2)   NULL,
    [Марка]               NVARCHAR(100)   NULL,
    [Модель]              NVARCHAR(100)   NULL,
    [Цвет]                NVARCHAR(50)    NULL,
    [Госномер]            NVARCHAR(20)    NOT NULL,
    [Код валюты]          INT             NULL,
    CONSTRAINT [PK_Транспортное средство] PRIMARY KEY CLUSTERED ([Код ТС] ASC),
    CONSTRAINT [UQ_ТС_Госномер] UNIQUE ([Госномер]),
    CONSTRAINT [FK_ТС_Категория] FOREIGN KEY ([Код категории])
        REFERENCES [Категория] ([Код категории]),
    CONSTRAINT [FK_ТС_Денежная единица] FOREIGN KEY ([Код валюты])
        REFERENCES [Денежная единица] ([Код валюты])
);
GO


-- 8. Договор аренды
CREATE TABLE [Договор аренды] (
    [Номер договора]                    INT             IDENTITY(1,1) NOT NULL,
    [рег_Код офиса]                     INT             NULL,  -- офис выдачи
    [Код клиента]                       INT             NULL,
    [Дата оформления]                   DATE            NULL,
    [Дата оплаты]                       DATE            NULL,
    [Срок аренды]                       INT             NULL,  -- в днях
    [Дата начала аренды]                DATE            NULL,
    [Фактическая дата окончания аренды] DATE            NULL,
    [Менеджер]                          NVARCHAR(150)   NULL,
    [Телефон]                           NVARCHAR(50)    NULL,
    [Договор аннулирован]               BIT             NULL,
    [Код ТС]                            INT             NULL,
    CONSTRAINT [PK_Договор аренды] PRIMARY KEY CLUSTERED ([Номер договора] ASC),
    CONSTRAINT [FK_Договор_Офис_выдачи] FOREIGN KEY ([рег_Код офиса])
        REFERENCES [Офис проката] ([Код офиса]),
    CONSTRAINT [FK_Договор_Клиент] FOREIGN KEY ([Код клиента])
        REFERENCES [Клиент] ([Код клиента]),
    CONSTRAINT [FK_Договор_ТС] FOREIGN KEY ([Код ТС])
        REFERENCES [Транспортное средство] ([Код ТС])
);
GO


-- 9. Платежный документ
CREATE TABLE [Платежный документ] (
    [Номер документа]   INT             IDENTITY(1,1) NOT NULL,
    [Номер договора]    INT             NULL,
    [Тип документа]    NVARCHAR(100)   NULL,
    [Дата оплаты]       DATE            NULL,
    [Сумма]             DECIMAL(18,2)   NULL,
    [Код валюты]        INT             NULL,
    CONSTRAINT [PK_Платежный документ] PRIMARY KEY CLUSTERED ([Номер документа] ASC),
    CONSTRAINT [FK_Платежный_Договор] FOREIGN KEY ([Номер договора])
        REFERENCES [Договор аренды] ([Номер договора]),
    CONSTRAINT [FK_Платежный_Валюта] FOREIGN KEY ([Код валюты])
        REFERENCES [Денежная единица] ([Код валюты])
);
GO


-- 10. Уточнение договора
CREATE TABLE [Уточнение договора] (
    [Номер договора]    INT             NOT NULL,
    [Номер записи]      INT             IDENTITY(1,1) NOT NULL,
    [Коэффициент]       DECIMAL(10,4)   NULL,
    CONSTRAINT [PK_Уточнение договора] PRIMARY KEY CLUSTERED ([Номер записи] ASC),
    CONSTRAINT [FK_Уточнение_Договор] FOREIGN KEY ([Номер договора])
        REFERENCES [Договор аренды] ([Номер договора])
);
GO


-- 11. Дополнительные условия аренды
CREATE TABLE [Дополнительные условия аренды] (
    [Номер записи]   INT             IDENTITY(1,1) NOT NULL,
    CONSTRAINT [PK_Доп условия аренды] PRIMARY KEY CLUSTERED ([Номер записи] ASC)
);
GO


-- 12. Условие  (связывает доп. условия с денежной единицей)
CREATE TABLE [Условие] (
    [Номер записи]   INT             IDENTITY(1,1) NOT NULL,
    [Код валюты]     INT             NULL,
    [Стоимость]      DECIMAL(18,2)   NULL,
    CONSTRAINT [PK_Условие] PRIMARY KEY CLUSTERED ([Номер записи] ASC),
    CONSTRAINT [FK_Условие_ДопУсловия] FOREIGN KEY ([Номер записи])
        REFERENCES [Дополнительные условия аренды] ([Номер записи]),
    CONSTRAINT [FK_Условие_Валюта] FOREIGN KEY ([Код валюты])
        REFERENCES [Денежная единица] ([Код валюты])
);
GO