Anzeige:
Ergebnis 1 bis 7 von 7

Thema: 1. Normalform?

  1. #1
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    377

    1. Normalform?

    Hallo Jungs. ( und Maedels )
    Vielleicht kann mir jemand von euch erklaeren was man genau unter der ersten Normalform versteht. Ich werde einfaci nicht schlau daraus:
    Ein Relationstyp befindet sich in der 1. NF wenn alle Attribute maximal einen Wert haben. -> atomarer Wert
    Was heisst das schon wieder?
    Also ich versteh das so ( und wahrscheinlich voellig falsch): In einer Tabelle kann nur eine Zeile mit Werten gefuellt sein und diese muessen eindeutig bestimmt sein.
    Ein anderer Weg waere: Es konnen mehrere Zeilen gefuellt sein, in jeder Spalte muessen aber immer andere Werte stehen sodass jede Zeile durch jede Spalte eindeutig identifiziert wird.

    Ich vermute aber dass ich da weit an der richtigen Bedeutung der 1. NF vorbeisteuere und moechte wissen, was ihr dazu sagt.
    Und was verstehen die Typen denn dann als atormare Werte.
    Atormar heisst bei mir, wenn ich mich richtig errinnere, dass eine Transaktion entwerder voll oder gar nicht durchgefuerht wird, aber ich seh da den Zusammenhang mit der 1. NF nicht!

    mfg nul
    Amilo D - 2,8 Ghz - ATI Radeon 9000
    Debian GNU/Linux 3.1 (Sarge)

  2. #2
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    Also die Definition kenne ich etwas anders, nämlich dass am Kreutzpunkt Zeile,Spalte nur eine Attributsausprägung vorkommt. Das hast du schon, wenn du eine "ordentliche" Tabelle hast. Dann stehen nämlich z.B. nicht zwei Usernamen in einem Feld und jeder Username ist (mindestens) einer Zeile eindeutig zugeordnet.

    so was geht nicht:
    plz | Ort | Name
    --------------------------------------
    1234 | irgendwo | irgendwer
    nochwer
    ----------------------------------------
    1235 | sonstwo | weranders
    -----------------------------------------
    ....

    Ärger mit so etwas bekommt man schnell, wenn man z.B. aus einer Tabelle einer Textverarbeitung oder einer Tabellenkalkulation eine Datenbanktabelle machen soll. Die Leute füllen dann die notwendigen Angaben nicht aus, wenn sie die gleichen wie in der Zeile darüber sind. Das muss man dann nachholen. Vor allem muss man alle Schlüsselfelder ausfüllen.
    Geändert von mwanaheri (21-01-2005 um 17:24 Uhr)
    Das Ziel ist das Ziel.

  3. #3
    Registrierter Benutzer
    Registriert seit
    26.11.2004
    Ort
    Fulda
    Beiträge
    70
    Hallo an euch

    Also wenn ich das noch richtig aus dem letzten Semester im Kopf habe dann ist die 1.Normalform das ein Primärschlüssel vorhanden ist der Jede Zeile richtig eindeutig idenzifiziert wobei jede zeile nur einmal vorkommen darf

    so habe ich es in erinnerung leider habe ich mein skript weiter gegeben

    mfg

    Gsus
    C > Java oder wie ?

  4. #4
    Registrierter Benutzer
    Registriert seit
    28.08.2002
    Beiträge
    496
    @gsus: die primärschlüssel sind erst in der 2. normalform relevant


    die erste normalform besagt, dass jedes feld einer tabelle eindeutig sein muss, und nicht mehrere werte enthalten darf (atomar).

    also des geht nicht:
    name | adresse | haustier1,haustier2

    muss so sein:
    name | adresse | haustier1
    name | adresse | haustier2

    dann ist es in der ersten normalform
    grüße

  5. #5
    Registrierter Benutzer
    Registriert seit
    22.08.2002
    Ort
    Nürnberg
    Beiträge
    638
    Hi,

    Beispiel: Du hast Leute und ihre Lieblingsfarben (oder was auch immer):
    Code:
     ID | Name | Farbe
      1 | Ulli |  rot
      2 | Ulli | grün
      3 | Ulli | blau
      4 | Rick | gelb
      5 | Rick | blau
    Dies entspricht nicht der 1. NF, weil beim Attribute "Name" und beim Attribute "Farbe" mehrmals der selbe Werte mit unterschiedlicher ID vorkommt.
    Man könnte dies jetzt normalisieren indem man ein Tabelle für die Namen und die Farben macht. Hierfür gibt es jetzt zwei Möglichkeiten:
    Code:
     ID | Name | FarbeID       ID | Farbe
      1 | Ulli |     1          1 |  rot
      2 | Ulli |     2          2 | grün
      3 | Ulli |     3          3 | blau
      4 | Rick |     4          4 | gelb
      5 | Rick |     3
    
     ID | Name         ID | NameID | Farbe
      1 | Ulli          1 |    1   |  rot
      2 | Rick          2 |    1   | grün
                        3 |    1   | blau
                        4 |    2   | gelb
                        5 |    2   | blau
    In der ersten Variante ist die Farbtabelle in der 1. NF die Namenstabelle jedoch nicht. Denn ein Name kann über verschiedene IDs erreicht werden (bei der Eintragung könnte der Name falsch geschrieben werden und eine Zuordnung ist nicht mehr möglich). In der zweiten Variante ist es genau umgekehrt.
    Deshalb könnte man es weiter normalisieren:
    Code:
     ID | Name         NameID | FarbeID       ID | Farbe
      1 | Ulli            1   |     1          1 |  rot
      2 | Rick            1   |     2          2 | grün
                          1   |     3          3 | blau
                          2   |     4          4 | gelb
                          2   |     3
    Jetzt sind die Namens- und Frabtabelle in der 1. NF (der Werte sind atomar, weil eine weitere Vereinfung nicht möglich ist). Denn wenn einer der Namen entscheidet noch eine zusätzliche Lieblingsfarbe zu haben, dann kann kein Fehler durch falsche Schreibweise passieren.

    Pingu

    EDIT: Asche auf mein Haupt. Quinte17 hat Recht in Bezug auf die 1. NF. Lesen müßte man (ich) können. Mein Beispiel ist dann der nächste Schritt.
    Geändert von Pingu (22-01-2005 um 09:31 Uhr)
    Homepage: www.pingu.info

  6. #6
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    377
    @all: Schon mal vielen Dank fuer eure HIlfe, hat mir sehr weitergeholfen!

    @Pingu: Was meinst du mit 2. Schritt, waere das dann die 2. Normalform?

    mfg nul
    Amilo D - 2,8 Ghz - ATI Radeon 9000
    Debian GNU/Linux 3.1 (Sarge)

  7. #7
    Registrierter Benutzer
    Registriert seit
    28.08.2002
    Beiträge
    496
    @nul: die 2. Normalform besagt, dass alle felder die von einem schlüssel abhängen in eine externe tabelle zu ziehen sind.
    du musst dir zuerst den schluessel in deiner tabelle heraussuchen, dass sind alle felder die eine zeile eindeutig machen.
    Code:
    idname | vname | nname | haustier
    ---------------------------------
    1      | xxx   | yyy   | hund
    1      | xxx   | yyy   | katze
    2      | hhh   | iii   | fisch
    2      | hhh   | iii   | hamster
    in diesem fall wäre eine zeile eindeutig wenn
    idname und haustier
    bekannt sind.
    somit ist idname und haustier der schlüssel
    nun musst du vname und nname mit hilfe des schlüssels idname aus der tabelle ziehen:
    Code:
    idname | haustier
    -----------------
    1      | hund
    1      | katze
    2      | fisch
    2      | hamster
    
    idname | vname | nname
    ----------------------
    1      | xxx   | yyy  
    2      | hhh   | iii
    dies ist aber noch nicht ganz die 2. normalform... da haustier auch noch rauszuziehen ist:
    Code:
    idname | haustier
    -----------------
    1      | hund
    1      | katze
    2      | fisch
    2      | hamster
    
    idname | vname | nname
    ----------------------
    1      | xxx   | yyy  
    2      | hhh   | iii  
    
    haustier
    --------
    hund    
    katze   
    fisch   
    hamster
    hier könnte man sich fragen warum ich dem haustier nicht noch eine id verpasse und dies scheibar redundant ist. ein primärschlüssel muss NICHT eine zahl sein, es kann alles sein, wie in dem fall halt tiere. ist alles eine frage des geschmacks und des designs. (und es kommt auf den lehrer an den du in der schule hast ^^)

    greetz

Lesezeichen

Berechtigungen

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