Schrift
[thread]10343[/thread]

foreign keys auf die selbe Tabelle



<< >> 3 Einträge, 1 Seite
ptk
 2007-09-07 11:50
#99179 #99179
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Vielleicht die Reihenfolge der INSERTs umkehren? Also zuerst thread in die DB stellen, dann node?
moritz
 2007-09-07 11:41
#99184 #99184
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Ich experimentiere gerade ein bisschen mit PostgreSQL und bin dabei mir ein Datenmodell für ein Forum zusammenzubasteln.

Für einen Beitrag habe ich mir die Tabelle "node" ausgedacht:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE node (
id SERIAL NOT NULL PRIMARY KEY,
person_id INT NOT NULL REFERENCES person(id),
thread_id INT NOT NULL REFERENCES node(id),
parent_id INT REFERENCES node(id),
title VARCHAR(80),
text TEXT,
creation_time TIMESTAMP NOT NULL DEFAULT NOW(),
karma INT NOT NULL DEFAULT 0,
category_id INT NOT NULL REFERENCES category
);


Dabei soll thread_id auf den ersten node des Threads zeigen.
Wenn ich allerdings den ersten node in die Datenbank einfüge, weiß ich ja dessen id noch nicht.
Wenn ich thread_id weglasse, kommt die Fehlermeldung
Code: (dl )
1
2
3
DBD::Pg::st execute failed: ERROR:  null value in column "thread_id" violates not-null constraint
insert() - DBD::Pg::st execute failed: ERROR: null value in column "thread_id" violates not-null constraint
at test.pl line 32


Jetzt könnte ich natürlich das Problem umgehen, indem ich den NOT NULL-constraint einfach rausnehme - aber gibts da keine besser Lösung? Sowas wie 'thread_id INT NOT NULL default id REFERENCES node(id)'?
Diese Variante gibt mir
Code: (dl )
ERROR:  cannot use column references in default expression


Gibt es einen anderen workaround?
moritz
 2007-09-07 12:19
#99187 #99187
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
thread_id referenziert die Tabelle node (also sich selbst), ein besserer Name wäre wohl root_id (vorgeschlagen von pq++).

Eine extra Thread-Tabelle gibt es nicht.
<< >> 3 Einträge, 1 Seite



View all threads created 2007-09-07 11:41.