Anzeige:
Ergebnis 1 bis 10 von 10

Thema: Foreign Key Constraints und Nullwerte

  1. #1
    Registrierter Benutzer
    Registriert seit
    17.09.2001
    Beiträge
    1.182

    Foreign Key Constraints und Nullwerte

    Hallo,

    Ich entwickle gerade ein DB-Interface und würde gern so viele Constraints wie möglich verwenden.
    Bei Foreign-Key Constraints kämpfe ich etwas, da die Integrität in beide Richtungen überprüft wird, ich aber gerne Nullwerte erlauben würde.

    Gibts dafür eine einfache Lösung?

    Danke im Vorraus
    Geändert von Lin728 (21-08-2017 um 16:08 Uhr)

  2. #2
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    Was ist mit 'in beide Richtungen überprüfen' gemeint?
    Das Ziel ist das Ziel.

  3. #3
    Registrierter Benutzer
    Registriert seit
    17.09.2001
    Beiträge
    1.182
    Angenommen ich hab zwei Relationen Firma und Land, und es besteht eine n-1 beziehung zwischen Firma und Land.

    Wie kann ich sicherstellen dass ein Land nicht gelöscht werden darf, welches von einer Firma referenziert wird, umgekehrt jedoch bei einer Firma kein land eingetragen sein muss?
    Geändert von Lin728 (21-08-2017 um 16:08 Uhr)

  4. #4
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Um was für eine DB handelt es sich? In Oracle z. B. richtest Du einfach einen Foreign Key Constraint von Firma auf Land ein, und wenn die entspr. Spalte in Firma NULL-Werte erlaubt, dann ist es das schon.

    Jan

  5. #5
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    Sehe ich wie jan61. Das sollte der Normalfall sein.
    Das Ziel ist das Ziel.

  6. #6
    Registrierter Benutzer
    Registriert seit
    17.09.2001
    Beiträge
    1.182

    Nullwerte?

    Zitat Zitat von jan61 Beitrag anzeigen
    Um was für eine DB handelt es sich? In Oracle z. B. richtest Du einfach einen Foreign Key Constraint von Firma auf Land ein, und wenn die entspr. Spalte in Firma NULL-Werte erlaubt, dann ist es das schon.
    Ich muss leider MySQL (5.0 oder 5.1) verwenden. Wie kann man denn nullwerte erlauben? (ich verwende eh kein "NOT NULL" Constraint.
    Geändert von Lin728 (21-08-2017 um 16:09 Uhr)

  7. #7
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    Also dieser Webseite
    http://dev.mysql.com/doc/refman/5.1/...ing-nulls.html
    zufolge müsste auch bei mysql das Erlauben von null normal sein. Sie sind also erlaubt, solange man sie nicht verbietet.
    Das Ziel ist das Ziel.

  8. #8
    Registrierter Benutzer
    Registriert seit
    17.09.2001
    Beiträge
    1.182

    Naja...

    Ok, ich hab den Fehler gefunden.

    Ich verwende eine in Java-Bibliothek zu Oberflächenprogrammierung ( http://sourceforge.net/projects/swingset ), die kann mit NULL-Werten nicht umgehen, deshalb defaulte ich auf 0.
    0 gibts aber nicht als Schlüssel, und NULL ists auch nicht -> Constraint verletzung.
    Geändert von Lin728 (21-08-2017 um 16:09 Uhr)

  9. #9
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Zitat Zitat von ceisserer Beitrag anzeigen
    Ich muss leider MySQL (5.0 oder 5.1) verwenden. Wie kann man denn nullwerte erlauben? (ich verwende eh kein "NOT NULL" Constraint.
    Armer Kerl ;-) Nich mal ne richtige Datenbank darfst Du benutzen - SCNR. Bitte keinen DB-Flamewar starten.

    Wenn Du nicht die Klausel "NOT NULL" angibst, dann hast Du damit eben NULL-Werte erlaubt. Fertig.

    Jan

  10. #10
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Zitat Zitat von ceisserer Beitrag anzeigen
    ...Ich verwende eine in Java-Bibliothek zu Oberflächenprogrammierung ( http://sourceforge.net/projects/swingset ), die kann mit NULL-Werten nicht umgehen, deshalb defaulte ich auf 0.
    0 gibts aber nicht als Schlüssel, und NULL ists auch nicht -> Constraint verletzung....
    Wenn der Fehler bei Inserts / Updates passiert: Kannst Du die Bibliothek dazu überreden, diese Spalten einfach wegzulassen bei NULL-Werten? Dann ist in der DB die Spalte automatisch NULL. Ansonsten fallen mir noch 2 (zugegebenermaßen nicht so schöne) Workarounds ein:
    - Lege für Deinen Default 0 einen Satz in der Lookup-Tabelle an
    - Seit Kurzem kann MySQL ja angeblich Trigger: Baue einen DB-Trigger, der beim Auftreten des Defaults die Spalte auf NULL setzt (muss also ein BEFORE INSERT- / BEFORE UPDATE-Trigger sein)

    Jan

    P.S.: Eigentlich wollte ich es nicht sagen - das ist mir eine Vergewaltigung des SQL zuviel: In MySQL kannst Du IIRC zumindest bei SELECT-Anweisungen mit if-then-Konstruktionen arbeiten, das wäre eine Variante, wie Du über Views die NULL-Werte bei Abfragen übertünchen kannst.
    Geändert von jan61 (14-08-2007 um 22:34 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •