FOREIGN KEYs

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • FOREIGN KEYs

    Hallo zusammen,


    Als ich letztens nach einer Software suchte um meine MYSQL-Datenbank (Version 5.0.37) grafisch darzustellen (verbindungen, verknüpfungen, etc, ..) stiess ich immer wieder auf "FOREIGN KEYs". Also machte ich mich auf die Suche danach, wurde aber leider auf keiner deutschsprachigen Seite/Doku/etc. zufrieden gestellt was meine Fragen betraf.

    Kann ich nachträglich solche speichern/vermerken?
    -> Wenn ja, hat das direkte auswirkungen auf vorhandene Querys/Scripte?
    -> Wenn ja, wie mache ich das nachträglich?
    -> Wenn nein, gibts sonst eine Möglichkeit solche zustande zu bekommen?


    Ziel des ganzen ist es, dass ich eine Übersicht einer Datenbank bekomme, welche Tabelle worauf Bezug zieht, etc. - ich denke man weiss schon worauf ich hinaus will.


    Besten Dank schonmal im Voraus!

  • #2
    Re: FOREIGN KEYs

    Original geschrieben von medium22
    Kann ich nachträglich solche speichern/vermerken?
    Klar

    Original geschrieben von medium22
    -> Wenn ja, hat das direkte auswirkungen auf vorhandene Querys/Scripte?
    Im Prinzip erstmal keine. Je nach dem, wie du die Beziehung setzt, könnten deine Scripte aber in falschen Reihenfolgen arbeiten und Beispielsweise Keys setzen, die es noch gar nicht gibt. Solltest du allerdings sauber gearbeitet haben, sollte es nur in extremen Ausnahmefällen zu irgendwelchen Problemen bzw. Umstellungen kommen.


    Original geschrieben von medium22
    -> Wenn ja, wie mache ich das nachträglich?
    Genau so wie sonst auch. Das MySQL Handbuch liefert dir Antworten.
    [FONT="Helvetica"]twitter.com/unset[/FONT]

    Shitstorm Podcast – Wöchentliches Auskotzen

    Kommentar


    • #3
      Re: Re: FOREIGN KEYs

      Original geschrieben von unset

      Im Prinzip erstmal keine. Je nach dem, wie du die Beziehung setzt, könnten deine Scripte aber in falschen Reihenfolgen arbeiten und Beispielsweise Keys setzen, die es noch gar nicht gibt...
      Quatsch, man definiert einen Constraint um genau sowas abzufangen. Die DBMS wirft in diesem Fall sofort eine Fehlermeldung ab.

      Kommentar


      • #4
        Re: Re: Re: FOREIGN KEYs

        Original geschrieben von asp2php
        Quatsch, man definiert einen Constraint um genau sowas abzufangen. Die DBMS wirft in diesem Fall sofort eine Fehlermeldung ab.
        Womit es direkte Auswirkungen auf vorhandene Queries hat ...
        [FONT="Helvetica"]twitter.com/unset[/FONT]

        Shitstorm Podcast – Wöchentliches Auskotzen

        Kommentar


        • #5
          Das hast du in deinem vorigen Post nicht gesagt. Es sah eher danach aus, dass man munter Leichen in die DB schreiben könnte.

          Kommentar


          • #6
            Hallo,


            Ich hoffe doch das ich soweit sauber gearbeitet habe - das würde sich dann schon bemerkbar machen wenn nicht *feix*

            Ich hab mal MySQL Handbuch rumgestöbert und dieses hier gefunden - ich gehe mal davon aus dass das das richtig ist. Nur verstehe ich das ganze nicht so ganz.

            Müsste es auf meine DB gemünzt nun in etwa so aussehen?

            Tabellen:
            user: id, name, logins, ...
            pn: pnid, pn_from, pn_to, pn_text, ...
            log: id, cid, editor, time, ...
            ...

            Fett dargestellt sind jene die sich auf die Tabelle user (id) beziehen.

            Code:
            ALTER TABLE pn
                FOREIGN KEY [id] (pn_from, pn_to)
                REFERENCES user (id)
            Ich teste sowas nur ungern an einem Liveobjekt, daher frage ich lieber nach bevor ich etwas abschiesse *g* Würde das denn so passen oder gehe ich in die komplett falsche Richtung?

            Kommentar


            • #7
              Würde das denn so passen oder gehe ich in die komplett falsche Richtung?
              Nö, das sieht ganz gut aus. Die eckigen Klammern bei [id] bedeuten aber, dass dieser Teil optional ist, d.h. die Klammern nicht mitverwenden.

              Kommentar


              • #8
                Original geschrieben von medium22

                Ich teste sowas nur ungern an einem Liveobjekt, daher frage ich lieber nach bevor ich etwas abschiesse *g* Würde das denn so passen oder gehe ich in die komplett falsche Richtung?
                Oh Gott, wasfür Entwickler bist du denn? Man hat immer einen Kopie lokal zum Entwickeln, wenn alles gut läuft, ausführlich getestet, erst dann live schalten (hochladen)

                Kommentar


                • #9
                  Original geschrieben von asp2php
                  Das hast du in deinem vorigen Post nicht gesagt. Es sah eher danach aus, dass man munter Leichen in die DB schreiben könnte.
                  Naja, ich habs zitiert. Wenn man ohne FKs in der falschen Reihenfolge angelegt hat, dann auf FKs steigt, wird man Probleme bekommen. Nichts, dass man nicht aus der Welt schaffen kann, aber eine on the fly migration ist das nicht mehr.
                  [FONT="Helvetica"]twitter.com/unset[/FONT]

                  Shitstorm Podcast – Wöchentliches Auskotzen

                  Kommentar


                  • #10
                    N'abend zusammen,


                    Nach langer Zeit komme ich nun mal wieder dazu daran rumzuwerkeln und auszutesten.

                    Folgendes habe ich erfolglos versucht

                    Code:
                    ALTER TABLE fragen
                      FOREIGN KEY (kat)
                      REFERENCES fragen_kat (id)
                    Die beiden Tabellen die das betrifft

                    fragen_kat:
                    - id (int(11))
                    - kategorie (tinytext)

                    fragen (gekürzte Version):
                    - id (int(11))
                    - kat (int(11))
                    - frage (tinytext)
                    - erstellt_von (int(11)

                    Beide Tabellen sind InnoDB.

                    Ziel ist es nun, "kat" aus der fragen-Tabelle, der id aus der Kategorientabelle (fragen_kat) zuzuweisen. (selbiges sollte später auch noch mit anderen Teilen passieren, aber das ist nun erstmal nicht der Punkt..)


                    Fehlermeldung ist: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FOREIGN KEY (kat) REFERENCES fragen_kat (id)' at line 2

                    Warum funktioniert das so nicht? Liegt da irgendwo ein Hund den ich nicht sehe?


                    Gruss

                    Kommentar


                    • #11
                      Die richtige Syntax kannst du hier nachlesen:
                      http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        Wüsste ich (genau!) zu verstehen wie das alles gemeint ist hätte ich die Frage nicht stellen müssen - hatte mein Versuch auch aus dem Handbuch abgeleitet.

                        Selbst ein
                        Code:
                        ALTER TABLE fragen
                          ADD [CONSTRAINT [symbol]]
                            FOREIGN KEY  (kat)
                            REFERENCES fragen_kat (id);
                        erzeugt eine Fehlermeldung. "symbol" wird auch nirgends beschrieben - leider.

                        Kommentar


                        • #13
                          Und wo war bspw. das ADD in deinem vorherigen Statement?
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            Nicht vorhanden - ging nicht davon aus das es so wichtig ist. Aber selbst mit erzeugt es dieselbe Fehlermeldung.

                            Kommentar

                            Lädt...
                            X