Announcement

Collapse
No announcement yet.

on delete cascade umändern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • on delete cascade umändern

    Guten Abend,
    ich habe momentan ein Problem beim Löschen von Datensätzen.
    Ich arbeite mit einer MySQL Datenbank und habe zwei Tabellen:
    Zum einen diese:
    Tabelle 1:
    |ID|IDNr|....
    ID und IDNr sind Unique. Es können mehrere Einträge für eine ID existieren, wobei dann immer die IDNr unterschiedlich ist.
    Dann habe ich noch eine andere Tabelle:
    |ID|lang|...
    ID ist hier primary key und gleichzeitig ein fremdschlüssel auf die ID der ersten Tabelle.
    Sobald eine Zeile aus der ersten Tabelle gelöscht wird, sodass die gelöschte ID in der gesamten Tabelle nicht mehr existiert, soll der zugehörige Datensatz in der 2.Tabelle für die entsprechende ID auch gelöscht werden.
    Habe das mal mit On DELETE CASCADE probiert nur ist das Problem hier, dass er nach jedem gelöschten Datensatz in der ersten Tabelle den entsprechenden Datensatz in der zweiten Tabelle gelöscht hat, obwohl die ID in der ersten Tabelle noch existieren könnte.
    Er sollte also bevor den Datensatz des Fremdschlüssels löscht erst einmal überprüfen, dass es keinen Datensatz mehr mit der ID in der ersten Tabelle gibt und erst dann sollte er in die zweite Tabelle reingehen und löschen.
    Ich würde On Delete Cascade also gerne irgendwie erweitern oder existiert für sowetwas schon eine Funktion??
    Oder muss ich das mit einerm Trigger machen? Wenn ja wie würde das ungefähr aussehen? Wie müsste ich dann vorgehen?

    Hoffe habe mich verständlich ausgedrückt wo das Problem liegt.

    liebe Grüße daniel

  • #2
    Ich würde eher das Datenschema fixen.

    Die Richtung des Fremdschlüssels ist falsch herum. Der FK muss von der Detailtabelle auf die ID der Mastertabelle weisen und nicht umgekehrt.
    Ich würde zudem eine syntetischen Schlüssel verwenden ( 1 eindeutiges Feld)

    Comment


    • #3
      Hallo,

      es ist immer wieder erschreckend. Also das Foreign Keys in MySQL eher stiefmütterlich behandelt werden hab ich ja schon gewusst, aber das man einen FK anlegen kann, dessen Referenziertes Feld nicht Unique ist ...

      Wie Markus schon gesagt hat, dein DB-Schema ist falsch und funktioniert so auch nur, weil da wohl MySQL einen Bug hat - oder ist es ein Feature .

      Gruß Falk
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        Die Mastertabelle ist die erste Tabelle. Un der Fremdschlüssel zeigt von der Detailtabelle auf die Mastertabelle.
        Des Weiteren ist doch die ID in der Mastertabelle im Zusammenhang mit der IDNr Unique, also im Zusammenspiel mit einem anderen Feld.
        Hilft da kein Trigger oder so?

        Comment


        • #5
          Originally posted by daniel_bln View Post
          ...Un der Fremdschlüssel zeigt von der Detailtabelle auf die Mastertabelle.
          Das ist erstmal korrekt. Aber dazu muß der Schlüssel in der Mastertabelle eindeutig sein und zwar als solcher und nicht nur in Verbindung mit einem zweiten. (Das MySQL das nicht zwingend erfordert sei mal ausser acht gelassen)

          Originally posted by daniel_bln View Post
          ...Die Mastertabelle ist die erste Tabelle.
          Dann erklär mir mal bitte wie ein Detaileintrag zwei oder mehr Master haben kann. Dass erschließt sich mir nicht und bereitet eigentlich nur Probleme - siehe dein Delete-Cascade.

          Gruß Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Originally posted by Falk Prüfer View Post


            Dann erklär mir mal bitte wie ein Detaileintrag zwei oder mehr Master haben kann. Dass erschließt sich mir nicht und bereitet eigentlich nur Probleme - siehe dein Delete-Cascade.

            Gruß Falk
            Ja, das mag sein. Das merke ich auch gerade. Aber das ganze lässt sich jetzt nicht mehr rückgängig machen. Also was kann ich tun? Geht das mit einem trigger oder nicht? Dann nehme ich onDeleteCascade und den Fremdschlüssel ebend raus und schreibe einen eigenen trigger. Wäre das möglich oder nicht??

            Comment


            • #7
              Originally posted by daniel_bln View Post
              ...Dann nehme ich onDeleteCascade und den Fremdschlüssel ebend raus und schreibe einen eigenen trigger. Wäre das möglich oder nicht??
              Mann kann natürlich auch an den Symptomen rumdoktern statt den Fehler zu beseitigen
              Mit einem Trigger wirst du das gleiche/ähnliche Problem haben. Da du in einem Row-Trigger nicht lesend auf die gerade geänderte Tabelle zugreifen kannst, wird es schwer herauszubekommen, ob der Detaildatensatz ggfs. eine weiteren Master hat.

              Gruß Falk
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment

              Working...
              X