Untitled

mail@pastecode.io avatar
unknown
mysql
7 months ago
3.3 kB
1
Indexable
Never
-- Створення таблиці "Клієнти"
CREATE TABLE Клієнти (
    Id INT PRIMARY KEY,
    ПІБ VARCHAR(255),
    Посвідчення_водія VARCHAR(255),
    Дата_отримання_посвідчення_водія DATE
);

-- Створення таблиці "Моделі"
CREATE TABLE Моделі (
    Id INT PRIMARY KEY,
    Назва_моделі VARCHAR(255),
    Марка VARCHAR(255),
    Ціна_за_день_оренди DECIMAL(10, 2),
    Місткість INT,
    Тип_кузова VARCHAR(255)
);

-- Створення таблиці "Автомобілі"
CREATE TABLE Автомобілі (
    Id INT PRIMARY KEY,
    Держномер VARCHAR(20),
    Рік_випуску INT,
    Колір VARCHAR(255),
    Стан VARCHAR(255),
    Пробіг INT,
    Модель_Id INT,
    FOREIGN KEY (Модель_Id) REFERENCES Моделі(Id)
);

-- Створення таблиці "Договори_на_оренду"
CREATE TABLE Договори_на_оренду (
    Id INT PRIMARY KEY,
    Клієнт_Id INT,
    Автомобіль_Id INT,
    Дата_укладення_договору DATETIME,
    Тривалість_договору NUMERIC(3, 0),
    Вартість_договору DECIMAL(10, 2),
    Дата_повернення DATETIME,
    FOREIGN KEY (Клієнт_Id) REFERENCES Клієнти(Id),
    FOREIGN KEY (Автомобіль_Id) REFERENCES Автомобілі(Id)
);

-- Створення таблиці "Оренда_Автомобілів"
CREATE TABLE Оренда_Автомобілів (
    Договір_Id INT,
    Автомобіль_Id INT,
    PRIMARY KEY (Договір_Id, Автомобіль_Id),
    FOREIGN KEY (Договір_Id) REFERENCES Договори_на_оренду(Id),
    FOREIGN KEY (Автомобіль_Id) REFERENCES Автомобілі(Id)
);


-- Перевірка на термін дії водійського посвідчення
DELIMITER //
CREATE TRIGGER Перевірка_терміну_посвідчення
BEFORE INSERT ON Договори_на_оренду
FOR EACH ROW
BEGIN
    DECLARE дія DATE;
    SELECT Дата_отримання_посвідчення_водія INTO дія FROM Клієнти WHERE Id = NEW.Клієнт_Id;
    IF DATE_ADD(дія, INTERVAL 10 YEAR) < NOW() THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Термін дії посвідчення закінчився';
    END IF;
END;
//
DELIMITER ;

DELIMITER //
CREATE TRIGGER check_duration_trigger
BEFORE INSERT ON Договори_на_оренду
FOR EACH ROW
BEGIN
    DECLARE duration_period INT;
    SET duration_period = DATEDIFF(NEW.Дата_повернення, NEW.Дата_укладення_договору);
    
    IF NEW.Тривалість_договору < duration_period THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Тривалість договору не може бути менше періоду від укладення до повернення';
    END IF;
END;
//
DELIMITER ;


ALTER TABLE Клієнти
ADD COLUMN QR_код VARCHAR(255);


ALTER TABLE Моделі
MODIFY COLUMN Ціна_за_день_оренди DECIMAL(12, 2);
Leave a Comment