1. При удалении материала, в таблице «Спецификация изделий» ID материала меняется на ID альтернативы, если альтернативы нет, то записи удаляются. Сами таблицы: CREATE DATABASE Proizvodstvo; USE Proizvodstvo; CREATE TABLE Oborudovaniye ( Id_Obor INT PRIMARY KEY AUTO_INCREMENT, O_Name VARCHAR(45), О_NachEk DATE, О_SrEK YEAR(100), О_Proiz VARCHAR(45), О_InterNomer INT );
CREATE TABLE Material ( id_Mat INT PRIMARY KEY AUTO_INCREMENT, М_Name VARCHAR(45), М_Tip VARCHAR(45), М_CenaZEd FLOAT, M_EdIzm VARCHAR(45), М_Alter VARCHAR(45) );
CREATE TABLE SpecifikIzdeliya ( id_SpIz INT PRIMARY KEY AUTO_INCREMENT, I_Name VARCHAR(45), I_Kol INT, I_DlitProiz YEAR(100), I_IdObor INT REFERENCES Oborudovaniye(Oborudovaniye), I_IdMat INT REFERENCES Material (id_Mat) );
Дополнен 5 лет назад
тут куча ошибок. Извиняйте. I_IdObor INT REFERENCES Oborudovaniye(Id_Obor),
Делаешь триггер до удаления. Из него удаляешь спецификации, если нет альтернативы, или изменяешь, если есть. Можно просто отдельными операторами delete, update с нужными условиями, без if.
Сами таблицы:
CREATE DATABASE Proizvodstvo;
USE Proizvodstvo;
CREATE TABLE Oborudovaniye
(
Id_Obor
INT PRIMARY KEY AUTO_INCREMENT,
O_Name VARCHAR(45),
О_NachEk DATE,
О_SrEK YEAR(100),
О_Proiz VARCHAR(45),
О_InterNomer INT
);
CREATE TABLE Material
(
id_Mat INT PRIMARY KEY AUTO_INCREMENT,
М_Name VARCHAR(45),
М_Tip VARCHAR(45),
М_CenaZEd FLOAT,
M_EdIzm VARCHAR(45),
М_Alter VARCHAR(45)
);
CREATE TABLE SpecifikIzdeliya
(
id_SpIz INT PRIMARY KEY AUTO_INCREMENT,
I_Name VARCHAR(45),
I_Kol INT,
I_DlitProiz YEAR(100),
I_IdObor INT REFERENCES Oborudovaniye(Oborudovaniye),
I_IdMat INT REFERENCES Material (id_Mat)
);