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


CREATE TABLE Породы (
    КодПороды INTEGER PRIMARY KEY AUTOINCREMENT,
    НазваниеПороды VARCHAR(100) NOT NULL UNIQUE
);

CREATE TABLE Владельцы (
    КодВладельца INTEGER PRIMARY KEY AUTOINCREMENT,
    ФИО VARCHAR(100) NOT NULL,
    Телефон VARCHAR(20)
);

CREATE TABLE Животные (
    КодЖивотного INTEGER PRIMARY KEY AUTOINCREMENT,
    Кличка VARCHAR(100) NOT NULL,
    ДатаРождения DATE,
    КодПороды INT,
    КодВладельца INT,
    КодОтца INT NULL,
    КодМатери INT NULL,
    FOREIGN KEY (КодПороды) REFERENCES Породы(КодПороды),
    FOREIGN KEY (КодВладельца) REFERENCES Владельцы(КодВладельца),
    FOREIGN KEY (КодОтца) REFERENCES Животные(КодЖивотного),
    FOREIGN KEY (КодМатери) REFERENCES Животные(КодЖивотного)
);

CREATE TABLE Врачи (
    КодВрача INTEGER PRIMARY KEY AUTOINCREMENT,
    ФИО VARCHAR(100) NOT NULL,
    Специализация VARCHAR(100)
);

CREATE TABLE Сертификаты (
    КодСертификата INTEGER PRIMARY KEY AUTOINCREMENT,
    КодВрача INT NOT NULL,
    НазваниеСертификата VARCHAR(100) NOT NULL,
    FOREIGN KEY (КодВрача) REFERENCES Врачи(КодВрача)
);

CREATE TABLE Услуги (
    КодУслуги INTEGER PRIMARY KEY AUTOINCREMENT,
    НазваниеУслуги VARCHAR(100) NOT NULL UNIQUE,
    Стоимость DECIMAL(10,2) NOT NULL
);

CREATE TABLE Приемы (
    КодПриема INTEGER PRIMARY KEY AUTOINCREMENT,
    КодЖивотного INT NOT NULL,
    КодВрача INT NOT NULL,
    КодУслуги INT NOT NULL,
    ДатаПриема DATE NOT NULL,
    FOREIGN KEY (КодЖивотного) REFERENCES Животные(КодЖивотного),
    FOREIGN KEY (КодВрача) REFERENCES Врачи(КодВрача),
    FOREIGN KEY (КодУслуги) REFERENCES Услуги(КодУслуги)
);

CREATE TRIGGER trg_chip_only_certified
BEFORE INSERT ON Приемы
FOR EACH ROW
BEGIN
    SELECT CASE
        WHEN (
            NEW.КодУслуги = (SELECT КодУслуги FROM Услуги WHERE НазваниеУслуги = 'Чипирование')
            AND 
            NOT EXISTS (SELECT 1 FROM Сертификаты WHERE КодВрача = NEW.КодВрача AND НазваниеСертификата = 'Чипирование')
        )
        THEN RAISE(ABORT, 'ОШИБКА: Чипирование может выполнять только врач с сертификатом "Чипирование"')
    END;
END;