Ich richte eine Datenbank für einen Computerladen ein. In der Datenbank habe ich eine Tabelle namens computer_system, die ein Array-Attribut hat. In der Anordnung diese Komponenten gehen: cpu ram Fall Mainboard GrafikkarteWie man eine bedingte Bedingung in postgreSQL setzt
Nun zum schwierigen Teil: Die verschiedenen Komponenten haben ihre eigenen Tabellen und alle untergeordneten Tabellen einer Tabelle namens Komponente. Die Mainboard-Tabelle hat ein Attribut namens "on-board graphics". Wenn es eine Grafikkarte hat, wird sie hier aufgelistet. Wenn nicht, ist das Attribut null.
Jetzt, wenn ich Komponenten in die Computer_System-Tabelle einfügen, brauche ich Postgres, um zu überprüfen, ob das Mainboard übergeben wurde, hat eine Onboard-Grafikkarte. Wenn nicht, muss eine Grafikkarte hinzugefügt werden, bevor die Abfrage erfolgreich ausgeführt werden kann. Wie füge ich diese Einschränkung hinzu?
Ich habe versucht, mein Problem so gut wie möglich zu erklären, und ich habe alle meine Bücher überprüft, aber ich kann die Antwort darauf nicht finden. Frag mich, ob etwas unklar ist. Auch hier ist ein unfertiges ER-Diagramm I für diese Datenbank
http://i.stack.imgur.com/zAT0f.png
EDIT gemacht habe: Mit anderen Worten, was ich tun möchte, ist, wenn mainboard.on_board_graphics NULL ist, dann kann graphics_card nicht sein NULL.
Komponenten und ihre Eigenschaften ändern sich so schnell, dass Sie Ihr Schema jeden Tag neu gestalten müssen. Sieht so aus, als wäre das JSON-Format dafür geeigneter, mit Einschränkungen auf der Anwendungsseite. –
@EgorRogov Dies ist eine Schulaufgabe, also muss ich die Datenbank nicht aktualisieren, abhängig von den Eigenschaften der Komponenten in der realen Welt :) – yeahboy
Nun, ohne Ihre Tabellen zu sehen, ist es schwer, etwas zu empfehlen. Aber wenn Sie maximal eine Grafikkarte an ein Motherboard anschließen, können Sie FK wie folgt haben: 'mainboard.graphics_card_id verweist auf Grafikkarte (id)'. Dann können Sie constraint 'check hinzufügen ((on_board_graphics is not null) oder (graphics_card_id ist nicht null))'. –