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