Alexander Brock: Daten in normalisierte Datenbank einfügen

Hallo Freunde des gehobenen Forumsgenusses,

Ich beschäftige mich gerade mit Datenbanken, SQL und Normalisierung. Dabei ist mir aufgefallen, dass immer nur beschrieben wird, wie man aus vielen Tabellen wieder eine virtuelle große macht (mit joins).

Wenn man jetzt eine Datenbank mit drei Tabellen hat:
1. vornamen
vorname_id (integer)
vorname (varchar)

2. nachnamen
nachname_id (integer)
nachname (varchar)

3. telephonnummern
vorname_id (integer)
nachname_id (integer)
telephonnummer (integer)

Gibt es dann eine Syntax für Insert, mit der man einen neuen Kontakt einfügen kann? Oder muss das Programm, das die Datenbank verwendet selbst nachschauen, ob es Vorname oder Nachname schon gibt und entsprechend verschiedene Inserts machen?

Gruß
Alexander Brock

  1. Hi,

    also ich kenne verschiedene Ansätze dafür:

    1. Verwende einen View, der auf den Joins beruht. Damit muss man allerdings aufpassen, denn Views sind nicht unbedingt schreibfähig (man denke nur an Views, die den Primärschlüssel nicht selektieren...).
    2. Verwende eine STORED-PROCEDURE der du alle Parameter übergibst und die von sich aus die notwendigen Tabellen ansteuert.
    3. Mache die INSERTS (ja, mehrere) von Hand, achte dabei auf die korrekte Reihenfolge bzgl. der Fremdschlüssel und versuche wenn möglich eine einzige Transaktion zu verwenden, so dass bei einem Fehler nicht halbfertige Datensätze hängen bleiben.

    MfG
    Rouven

    --
    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Hallo Freunde des gehobenen Forumsgenusses,

      also ich kenne verschiedene Ansätze dafür:

      1. Verwende einen View [...] STORED-PROCEDURE

      Beides Wörter, von denen ich keine Ahnung habe, mit denen ich mich aber beschäftigen werde, vielen Dank.

      Gruß
      Alexander Brock

  2. yo,

    Ich beschäftige mich gerade mit Datenbanken, SQL und Normalisierung.

    bei einer richtigen normalisierung wäre das hinzufügen kein problem. diese drei tabellen haben nämlich nichts mit normalisierung zu tun, sondern gehören alle in eine tablle. oder ist genau das der grund deiner frage nach dem INSERT, eine neue tabelle aufzubauen und mit daten zu füttern ?

    Gruß
    Ilja

  3. Ilja hat es ja schon geschrieben: Deine DB ist nicht anständig normalisert. Du mußt alles zusammenlassen, was zusammengehört. Ein Datensatz für eine Person besteht z.B. aus Vorname, Nachname, Geburtsdatum (eine Entität).

    Angenommen aber, Du willst diese Teile auch vereinzeln - was jetzt wenig sinnvoll scheint - dann bräuchtest Du noch eine Tabelle für die eigentlichen Personen. z.B. Person_ID=12345, Vorname_ID=3 (Alexander->wird aus Tabelle Vornamen geholt), Nachname_ID=7 (Brock->wird aus Tabelle Nachnamen geholt), Telefon_ID=85 (0251/1245632->wird aus Tabelle Telefonnummern geholt).

    Ich empfehle Dir das Buch "SQL - Der Schlüssel zu relationalen Datenbanken". (rororo - Grundkurs Computerpraxis). Da wird das ganze Verfahren sehr ausführlich und am anschaulichen Beispiel beschrieben. Taschenbuch für 10,- Euro

    Gruß, Andreas

    --
    kennst Du schon die Zitatesammlung?