[PostgreSQL] constrains/foreign keys vraag

Pagina: 1
Acties:

  • GREENSKiN
  • Registratie: November 1999
  • Laatst online: 20-07 09:56
Ik heb een concrete vraag voor PostgresQL:

Stel, ik heb een muur. Die muur wordt gedefineerd door twee vertices (muurpunten):

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-------------------------------
| muur                        |
| --------------------------- |
| id  | vertexAid | vertexBid |
| --------------------------- |
| 1   | 1         | 2         |
| 2   | 2         | 3         |
| 3   | 3         | 4         |
| 4   | 4         | 1         |
-------------------------------

-------------------------------
| vertex                      |
| --------------------------- |
| id  | x        | y          |
| --------------------------- |
| 1   | 0        | 0          |
| 2   | 0        | 1000       |
| 3   | 1000     | 1000       |
| 4   | 1000     | 0          |
-------------------------------


Wanneer ik een muur weggooi, wil ik dat de database automatisch ook de vertices ervan weggooit, tenzij één van de vertices nog in gebruik is.

Is het mogelijk om dit te doen doormiddel van foreign keys? En zo ja, hoe?
Ik dacht in eerste instantie aan het zetten van een foreign key in de muur op vertexAid en vertexBid richting de vertex.id (cascading delete) en tegelijk een foreign key in de vertex op id richting muur.vertexAid en muur.vertexBid (restrict delete). Dit werkt helaas niet...

Ik begrijp dat ik dit natuurlijk ook zelf kan doen doormiddel van een aantal SQL queries, maar ik zou het fijn vinden als dit automagisch gebeurde. Mijn eerste stappen in echt DBMS land ;)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Het stukje "zodra de muur weggaat moet de vertex ook weg" kan alleen als de vertex een verwijzing naar muur had gehad middels een foreign key.

Dit kan uiteraard wel door de DBMS uitgevoerd worden, maar je zult een trigger moeten maken die on update en delete van de muur-tabel de vertex-tabel bijwerkt en/of juist de delete/update op de muur-tabel tegengaat.

Maar als een vertex zo weinig losse betekenis heeft, kan je evt ook naar de andere datatypen (point of line oid bijvoorbeeld) van postgres kijken en er niet eens een aparte tabel voor gebruiken...

[ Voor 23% gewijzigd door ACM op 24-07-2003 14:44 ]