Michiel Lange
2004-02-26 14:22:37 UTC
Hello,
I could use some help in getting to know how triggers are to be made
exactly. Even with the documentation it is hard for me to understand all
of it...
maybe I think about it in a too complex manner, freezing my own brains...
But here it is:
I have a database that is about how ocomputers and phones are connected
in a patch panel.
For that I have three tables:
patches(patch_id(serial, pkey), location(varchar, unique));
computers(computer_id(serial, pkey), name(varchar, unique), patch
(unique,references patches.patch_id), ... and some more);
phones(number(int4, pkey), owner(varchar), patch (unique,references
patches.patch_id), ... and some more);
(the database is not only about this information, there's quite some
more, but this narrows the problem down)
The point is:
I can say that computers.patch is unique
I can also say that phones.patch is unique
but there's also this situation that you cannot connect a computer and a
phone on the same patch_id, so if a patch is used for a computer it is
not possible to use that patch also for the phones. (and vise versa)
As far as I know there is no constraint that enforces this, so I will
have to write a trigger...
I can see a
CREATE TRIGGER unique_patch_trg BEFORE UPDATE OR INSERT ON computers
FOR EACH ROW
but then... it would be easiest if something like
IF EXIST patch IN phones.patch
THEN
ABORT
ENDIF
and about the same for the computers.patch...
anyone who can help me learn how to get this done?
Regards and thanks in advance,
Michiel
---------------------------(end of broadcast)---------------------------
TIP 8: explain analyze is your friend
I could use some help in getting to know how triggers are to be made
exactly. Even with the documentation it is hard for me to understand all
of it...
maybe I think about it in a too complex manner, freezing my own brains...
But here it is:
I have a database that is about how ocomputers and phones are connected
in a patch panel.
For that I have three tables:
patches(patch_id(serial, pkey), location(varchar, unique));
computers(computer_id(serial, pkey), name(varchar, unique), patch
(unique,references patches.patch_id), ... and some more);
phones(number(int4, pkey), owner(varchar), patch (unique,references
patches.patch_id), ... and some more);
(the database is not only about this information, there's quite some
more, but this narrows the problem down)
The point is:
I can say that computers.patch is unique
I can also say that phones.patch is unique
but there's also this situation that you cannot connect a computer and a
phone on the same patch_id, so if a patch is used for a computer it is
not possible to use that patch also for the phones. (and vise versa)
As far as I know there is no constraint that enforces this, so I will
have to write a trigger...
I can see a
CREATE TRIGGER unique_patch_trg BEFORE UPDATE OR INSERT ON computers
FOR EACH ROW
but then... it would be easiest if something like
IF EXIST patch IN phones.patch
THEN
ABORT
ENDIF
and about the same for the computers.patch...
anyone who can help me learn how to get this done?
Regards and thanks in advance,
Michiel
---------------------------(end of broadcast)---------------------------
TIP 8: explain analyze is your friend