0
我有這個ER圖: 我已經做了SQL翻譯,我已經寫了所有的關係是這樣的:PostgreSQL的糾正觸發
CREATE DOMAIN origine
AS VARCHAR(6) DEFAULT NULL
CHECK (value ='upload' or value = 'link');
CREATE TABLE progetto.Utente (
ID_Utente VARCHAR(4) check (ID_Utente like ‘U%’),
PRIMARY KEY (ID_Utente),
Username VARCHAR(20) NOT NULL UNIQUE
);
CREATE INDEX progetto.IDX_Utente_ID_Utente
ON progetto.Utente (ID_Utente);
CREATE TABLE progetto.Bacheca (
ID_Bacheca VARCHAR(4) check (ID_Bacheca like ‘B%’),
ID_Proprietario VARCHAR(4) NOT NULL,
PRIMARY KEY (ID_Bacheca),
FOREIGN KEY (ID_Proprietario) references progetto.Utente (ID_Utente)
on update cascade
on delete cascade,
Titolo VARCHAR(20) NOT NULL,
N_follower INT
);
CREATE TABLE progetto.Immagine (
ID_Img VARCHAR(4) check (ID_Img like ‘I%’),
PRIMARY KEY (ID_Img),
Origine origine,
Descrizione VARCHAR(20) default NULL,
Bacheca VARCHAR(4) NOT NULL,
FOREIGN KEY (Bacheca) references progetto.Bacheca (ID_Bacheca)
on update cascade
on delete cascade,
Possessore VARCHAR(4) NOT NULL,
FOREIGN KEY (Possessore) references progetto.Utente (ID_Utente)
on update cascade
on delete cascade
N_pin INT NOT NULL,
N_like INT NOT NULL,
N_preferiti INT NOT NULL,
ID_Preferito VARCHAR (20) NOT NULL
FOREIGN KEY (ID_Preferito) references progetto.Utente (ID_Utente)
on update cascade
on delete cascade
);
CREATE TABLE progetto.Topic (
ID_topic VARCHAR(4) check (ID_topic like ‘T%’),
PRIMARY KEY (ID_topic),
Nome VARCHAR(20) NOT NULL
);
CREATE TABLE progetto.Correlazione (
Immagine VARCHAR(4) NOT NULL,
FOREIGN KEY (Immagine) references progetto.Immagine (ID_Img)
on update cascade
on delete cascade,
Topic VARCHAR(20) NOT NULL,
FOREIGN KEY (Topic) references progetto.Topic (ID_topic)
on update cascade
on delete cascade,
PRIMARY KEY (Immagine, Topic)
);
CREATE TABLE progetto.Pin (
Utente VARCHAR(4) NOT NULL,
FOREIGN KEY (Utente) references progetto.Utente (ID_Utente)
on update cascade
on delete cascade,
Immagine VARCHAR(20) NOT NULL,
FOREIGN KEY (Immagine) references progetto.Immagine (ID_Img)
on update cascade
on delete cascade,
PRIMARY KEY (Utente, Immagine)
);
CREATE TABLE progetto.Likes (
Utente VARCHAR(4) NOT NULL,
FOREIGN KEY (Utente) references progetto.Utente (ID_Utente)
on update cascade
on delete cascade,
Immagine VARCHAR(20) NOT NULL,
FOREIGN KEY (Immagine) references progetto.Immagine (ID_Img)
on update cascade
on delete cascade,
PRIMARY KEY (Utente, Immagine)
);
CREATE TABLE progetto.FollowBacheca (
Utente VARCHAR(4) NOT NULL,
FOREIGN KEY (Utente) references progetto.Utente (ID_Utente)
on update cascade
on delete cascade,
Bacheca VARCHAR(4) NOT NULL,
FOREIGN KEY (Bacheca) references progetto.Bacheca (ID_Bacheca)
on update cascade
on delete cascade,
PRIMARY KEY (Utente, Bacheca)
);
CREATE TABLE progetto.FollowUtenti (
Follower VARCHAR(4),
FOREIGN KEY (Follower) references progetto.Utente (ID_Utente)
on update cascade
on delete cascade,
Followed VARCHAR(4),
FOREIGN KEY (Followed) references progetto.Utente (ID_Utente)
on update cascade
on delete cascade,
PRIMARY KEY (Follower, Followed)
);
CREATE TABLE progetto.Affinità (
Topic1 VARCHAR(4) NOT NULL,
FOREIGN KEY (Topic1) references progetto.Topic (ID_topic)
on update cascade
on delete cascade,
Topic2 VARCHAR(4) NOT NULL,
FOREIGN KEY (Topic2) references progetto.Topic (ID_topic)
on update cascade
on delete cascade,
PRIMARY KEY (Topic1, Topic2)
);
注:屬性在斜體是外鍵,加粗主鍵。
- Utente(ID_Utente,用戶名)
- Bacheca(ID_Bacheca,ID_Proprietario,TITOLO,N_follower)
- IMMAGINE(ID_img,ORIGINE,Descrizione,Bacheca,Possessore,N_pin,N_like,N_preferiti,ID_Preferito)Origine∈{UPLOAD,LINK} De scrizione可以是NULL
- 主題(ID_topic,諾姆)
- Correlazione(IMMAGINE,主題)
- 引腳(Utente,IMMAGINE)
- 喜歡(Utente, Immagine)
- FollowBacheca(Utente,Bacheca)
- FollowUtenti(跟隨,隨後)
- Attinenza(TOPIC1,標題2)
現在我有一個問題。我想,當我刪除一個「Utente」(用戶)時,他在與「Possesso」的關係中使用的「Immagine」僅在「Immagine」的Origine爲「鏈接」時被刪除。
我想我必須使用觸發器,但我無法寫出一個觸發器。 有什麼建議嗎? PS:我很抱歉意大利的名字。
嗯..好像它的工作。 如果我想添加「Immagine」不得與「Utente」的「Pin」關係的綁定呢? – user3004162
什麼是「不成銷關係」的意思? 'N_pin'是一個數字;你的意思是'N_pin = 0',否則不刪除? – Patrick
不在 針(Utente,Immagine) – user3004162