Announcement

Collapse
No announcement yet.

Codebeispiel ,welches Datenbanksystem

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

  • Codebeispiel ,welches Datenbanksystem

    Arbeite gerade einen Kurs durch in dem folgendes erstes konkretes SQL Beispiel auftritt und habe bereits 2 Tage vergeblich damit verschwendet eine Datenbank zu finden die die Tabelle so anlegt wie es laut Codebeschreibung sein sollte :


    CREATE TABLE Personal(
    Persnr INT PRIMARY KEY,
    Name CHAR(25) NOT NULL,
    Ort CHAR(15),

    Vorgesetzt SMALLINT REFERENCES Personal
    ON DELETE SET NULL
    ON UPDATE CASCADE,
    .........................

    1.
    Da in meinem Kurs allgemein Datenbanken behandelt werden ist leider keine konkrete Datenbank zum durcharbeiten der Beispiele genannt.
    Für welche SQL Datenbank ist dieser Syntax ?
    MySQL(mit gesetztem ANSI-SQL Schalter) meckert zwar selsamerweise nicht, legt hier aber ,laut Tabelleninspektor des "MySQL Query Browsers" ,(in dem ich den Code als Skript teste) keinen Fremdschlüssel für "Vorgesetzt" an
    und so werden auch die gestetzten Eigenschaften ON DELETE und ON UPDATE nicht übernommen.(Laut meinem KursSkript soll "Vorgesetzt" ein Fremdschlüssel sein der sich auf den Primärschlüssel der eigenen Relation bezieht)
    Lediglich Folgendes funktioniert bei mir in MySQL um diese Beziehung wie gewünscht zu modellieren(und nur wenn der Typ des referenzierten Fremdschlüssels identisch ist) :
    FOREIGN KEY (Vorgesetzt) REFERENCES Personal(Persnr)
    Ist MySQL(Verison 5.1) zum Durcharbeiten des Beipiels geeignet ?
    Welchem SQL Standart entspricht der im Kurs verwendete SQL-Code ?

    2.
    Kann Vorgesetzt nicht jeden def. Schlüsselwert von "Personal(Persnr)" annehmen?Wieso ist der Typ hier SMALLINT obwohl in "Personal(Persnr)" Integer Werte stehen könnten?

    Danke im vorraus für schnelle Hilfe!!!!

  • #2
    Hallo und willkommen,

    Arbeite gerade einen Kurs durch
    Die Angabe welcher Kurs könnte für die Antwort auch hilfreich sein - vielleicht kann es ja dann jemand bestimmt sagen falls er den Kurs auch durchgearbeitet hat.

    Ich tippe mal dass das für MS SQL Server ist. Hinweis: Die Express-Version ist kostenlos.

    Als SQL-Kurs kann ich dir sonst auch das Wiki-Book empfehlen.


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Danke für die Antwort!
      Es handelt sich um einen Datenbankkurs aus einem Studium...
      MS SQL Server also...Is da auch ne nette übersichtliche IDE dabei mit nem Skripteditor(so wie im MySQL Query Browser)?.
      Kann mir das mit den CodeStandarts mal jemand erklären?
      Dachte wenn in dem Kurs nach irgend nem Ansi Standart genomtes SQL gelehrt wird müsste das auch MySQL mit Ansi-Schalter nehmen....Irgendwas kapier ich scheinbar nicht....
      Oder is der verwendete Code tatsächlich kein genormtes SQL das alle DBSysteme verstehen sondern MS SQL spezifisch ?

      Comment


      • #4
        Is da auch ne nette übersichtliche IDE dabei mit nem Skripteditor
        Die IDE von Visual Studio kann man verwenden oder SQL Prompt sowie das SQL Server Management Studio.
        MfG
        Cheat-Sheets for Developers / Programming Quotes

        Comment


        • #5
          Hallo,

          für SQL-Standard siehe den Link zum Wiki-Book.


          mfG Gü
          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

          Comment


          • #6
            Habe das oben angeführte gegebene Beispiel nun als Skript mit SQL Server Management Studio auf einem SQL Server 2005 Express getestet. Erstmal wurde (wie ich mir dachte) der Datentyp moniert (da Datentyp des referenzierten Attributs nicht dem des referenzierendem
            entspricht). Gut OK dachte ich , vieleicht ein kleiner Fehler in dem Kurs ,also hab ich beide Typen konform zu INT gemacht...
            Allerdings meckert SQL Server Management Studio schon wieder wegen der Angabe der Einschränkungen für den Fremdschlüssel :



            Meldung 1785, Ebene 16, Status 0, Zeile 3
            Das Einführen der FOREIGN KEY-Einschränkung 'FK__Personal__Vorges__1B0907CE' für die 'Personal'-Tabelle kann Schleifen oder mehrere Kaskadepfade verursachen. Geben Sie ON DELETE NO ACTION oder ON UPDATE NO ACTION an, oder ändern Sie andere FOREIGN KEY-Einschränkungen.
            Meldung 1750, Ebene 16, Status 0, Zeile 3
            Die Einschränkung konnte nicht erstellt werden. Siehe vorherige Fehler.

            Doch kein Code für MS SQL Server ???? Oder meckert hier nur SQL Server Management Studio??
            Gibts dann vieleicht ne IDE und/oder nen anderen Server die bei diesem CodeBeispiel nicht meckern ,oder ist das Beispiel einfach nur falsch ??

            Comment


            • #7
              Zu 1.: Das ist eine mysql Syntax. Allerdings unterstützt mysql, sofern Du die MyIsam Engine verwendest keine FK-Constraints.
              Du musst die InnoDB Engine verwenden.

              Welchem SQL Standart entspricht der im Kurs verwendete SQL-Code ?
              Es handelt sich hier nicht um SQL (SELECT ...) sondern DDL (ALTER, CREATE, DROP etc.), wofür es keinen Standard gibt.

              Zu 2:
              Wieso ist der Typ hier SMALLINT obwohl in "Personal(Persnr)" Integer Werte stehen könnten?
              Sofern es keine "Finde die Fehler" Aufgabe ist, ist dieses Beispiel absoluter Müll.
              Zum einen werden CHAR Werte verwendet - absolut sinnlos, seit Jahrzehnten gibt es variable VARCHAR Datentypen, dann wird ein fachlicher Wert als PK verwendet - die Todsünde in der Datenmodellierung, und last but not least der unterschiedliche Wertebereich der FK-PK Beziehung, den Du ja schon festgestellt hast.

              Dim
              Zitat Tom Kyte:
              I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

              Comment


              • #8
                Es handelt sich hier nicht um SQL (SELECT ...) sondern DDL (ALTER, CREATE, DROP etc.), wofür es keinen Standard gibt.
                Macht jetzt für den Fragesteller keinen Unterschied aber DDL ist genauso wie DML und DCL Teil des ANSI SQL Standards. Das sich die Datenbankhersteller bei DDL (und erst Recht bei DCL) wenig bemühen sich an den Standard zu halten ist ein anderes Problem.

                Comment


                • #9
                  Danke für die Antworten.

                  Bei der Themeneröffnug hab ich folgedes geschrieben :
                  ".............
                  MySQL(mit gesetztem ANSI-SQL Schalter) meckert zwar selsamerweise nicht, legt hier aber ,laut Tabelleninspektor des "MySQL Query Browsers" ,(in dem ich den Code als Skript teste) keinen Fremdschlüssel für "Vorgesetzt" an
                  und so werden auch die gestetzten Eigenschaften ON DELETE und ON UPDATE nicht übernommen.............."

                  Das ist bei mir scheinbar mit beiden Engines gleich.
                  Es wird zwar genommen und ausgeführt( MySQL Query Browser),
                  aber nicht so angelegt.
                  Habe mal die Create-Anweisung der von mySQL(oder MySQL Query Browser???) tatsächlich angelegten Tabelle ins Clipboard kopieren lassen
                  ,und obiges Beispiel wird zu :


                  CREATE TABLE `radl`.`personal` (
                  `Persnr` int(11) NOT NULL,
                  `Name` char(25) NOT NULL,
                  `Ort` char(15) DEFAULT NULL,
                  `Vorgesetzt` smallint(6) DEFAULT NULL,
                  PRIMARY KEY (`Persnr`)
                  ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

                  Stellt sich also die Frage , wenn das tatsächlich MySQL Syntax ist , ob die Tabelle über den QueryBrowser(oder die DB) tasächlich einfach nicht so angelegt wurde(obwohl es keinerlei Meckerei gab) oder ob es an einer falschen Rückabbildung des MySQL Query Browsers liegt(Der Tabelleninspector also bestimmte FKs und Constraints die vielleicht doch angelegt wurden nicht zeigt und diese auch in der ,ins Clipboard kopierten, Create Anweisung nicht auftauchen).....
                  Kann man die noch auftauchenden Fragen so sehen , oder lieg ich da falsch ???
                  Es wäre zumindest schön wenn wenigstens der FK und die zugehörigen Eigenschaften/Einschränkungen in irgend einer Datenbank wie in dieser(im Kurs formulierten)Syntax angelegt würden , sonst müsste ich ja die ganze Syntax überall ändern .Was soll ich dann noch mit dem Kurs(außer vieleicht dem Theorieteil).Brauch den Schein aber leider,sonst würd ich mir einfach n gutes Buch suchen ,da Datenbanken ja schon recht interessant sind(Hab bisher nur in Pascal,Java und C/C++ ,nicht-Skript/nicht-Konsolensprachen ein wenig programmiert und würde langsam auch gerne die Kapitel über Datenbanken/Abfrage vertiefen). Das mit der Aufteilung von SQL in Datendefinitions- und Abfragesprache ist mir übrigens schon einigermaßen klar.
                  Noch irgendwelche Lösungvorschläge (außer das Beispiel einfach in den Müll zu werfen,wozu ich langsam sehr gute Lust hätte) ???

                  Comment


                  • #10
                    Ich habe das mal mit dem SQL-Server probiert und da werden auch die Referenzen angelegt, sofern sie richtig sind. Anstatt mySql zu verwenden, der statt einer Fehlermeldung nichts tut, würde ich den Sql-Server verwenden und mir bei den Fehlermeldungen überlegen, ob da nicht doch ein Fehler im Script vorliegt. Denn die Fehlermeldung bezüglich "Schleifen und mehrerer Kaskadepfade" deutet darauf hin, dass der SQL-Server die Anweisung sehr wohl versteht, diese gegenüber den bereits bestehenden Referenzen prüft und erkennt, dass da etwas nicht passt.

                    bye,
                    Helmut

                    Comment

                    Working...
                    X