Kampfgummibaerlie
Datenbank-Guru
- Beiträge
- 743
Annahme, ich würde eine Datenbank aufbauen wollen, in welcher eine ganze Familie, jedoch jeweils nur 1 Person pro Familie "auf dem Spielfeld" stellen kann.
Ist das irgendwie mittels einem simplen Constraint möglich? (Vl. weiß ich es noch nicht, oder habe es bisher vergessen, weil ja doch auch andere Dinge auf der Welt wandeln )
Mein Einfall wäre, eben wie bei dem Feiertage nicht eintragbar machen, über jede Menge Constraints zu machen.
Sprich:
Tabelle family erstellen
Tabelle familymembers erstellen
Tabelle Spielfelder erstellen
Die (mir) eingefallene Lösung wäre es einfach mittels 3 ungleich Constraints zu machen, ala:
1.:
2.:
Insertcodes:
Testcode:
Also, auf diesen Weg funktioniert es nicht, was ich auch erreichen wollte, aber ich frage nach, ob PostgreSQL eine Möglichkeit hat, direkt mehrere Spalten voneinander ungleich zu erfordern.
Ja, ich weiß, langer Thread, aber ich denke, ich bin langsam in meinem Element
Werde im November einen Anfänger-Kurs zwecks Homepages machen (HTML und CSS), und hoffentlich auch wieder ins Berufsleben einsteigen ;D
Ich bedanke mich hier in der Öffentlichkeit, dass der liebe Mr. Elephant (Akretschmer ) das Leben eines jungen Pensionisten "gerettet" hat
EDIT: Kleiner Denkfehler beim erstellen, lasse ihn aber drinnen, falls wer anders den gleichen Gedankenweg hat, wie ich
Es sind die entsprechenden 3 "Constraints" in einem eingebaut.
EDIT2: Würde das Ganze gerne in PostgreSQL 9.4 lösen, weil ich nicht weiß, ob und wie ich den NAS auf das 10er upgraden könnte ;D
Ist das irgendwie mittels einem simplen Constraint möglich? (Vl. weiß ich es noch nicht, oder habe es bisher vergessen, weil ja doch auch andere Dinge auf der Welt wandeln )
Mein Einfall wäre, eben wie bei dem Feiertage nicht eintragbar machen, über jede Menge Constraints zu machen.
Sprich:
Code:
create table family(id serial primary key, name text unique)
Code:
create table familymembers(id serial primary key, familyname text references family(name), member text unique);
Code:
create table spielfelder(id serial, spielfeldname text, spieler_1 text references familymembers(member), spieler_2 text references familymembers(member), spieler_3 text references familymembers(member), spieler_4 text references familymembers(member));
Die (mir) eingefallene Lösung wäre es einfach mittels 3 ungleich Constraints zu machen, ala:
1.:
Code:
create function member_of_family(x text) returns text as 'select familyname from familymembers where member = x' language sql;
2.:
Code:
alter table spielfelder add constraint just_one_per_family check (member_of_family(spieler_1) != member_of_family(spieler_2) AND member_of_family(spieler_1) != member_of_family(spieler_3) AND member_of_family(spieler_1) != member_of_family(spieler_4));
Insertcodes:
Code:
insert into family(name) values ('Rauchfangkehrer');
Code:
insert into familymembers(familyname, member) values ('Rauchfangkehrer', 'Raffael');
Testcode:
Code:
insert into spielfelder(spieler_1, spieler_2) values ('Raffael', 'Raffael');
Also, auf diesen Weg funktioniert es nicht, was ich auch erreichen wollte, aber ich frage nach, ob PostgreSQL eine Möglichkeit hat, direkt mehrere Spalten voneinander ungleich zu erfordern.
Ja, ich weiß, langer Thread, aber ich denke, ich bin langsam in meinem Element
Werde im November einen Anfänger-Kurs zwecks Homepages machen (HTML und CSS), und hoffentlich auch wieder ins Berufsleben einsteigen ;D
Ich bedanke mich hier in der Öffentlichkeit, dass der liebe Mr. Elephant (Akretschmer ) das Leben eines jungen Pensionisten "gerettet" hat
EDIT: Kleiner Denkfehler beim erstellen, lasse ihn aber drinnen, falls wer anders den gleichen Gedankenweg hat, wie ich
Es sind die entsprechenden 3 "Constraints" in einem eingebaut.
EDIT2: Würde das Ganze gerne in PostgreSQL 9.4 lösen, weil ich nicht weiß, ob und wie ich den NAS auf das 10er upgraden könnte ;D
Zuletzt bearbeitet: