AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

3. Normalform?

Ein Thema von brechi · begonnen am 2. Jun 2009 · letzter Beitrag vom 3. Jun 2009
Antwort Antwort
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#1

3. Normalform?

  Alt 2. Jun 2009, 13:50
Datenbank: MSSQL • Version: 2000 • Zugriff über: ADO
Ich habe eine Tabelle die soll Attribute zu Objekten beschreiben. z.B. hat ein Baum als Attribut die Höhe.

Das Attribut wird wie folgt gespeichert:

{AttributId}: Integer // Primärschlüssel
{ObjektID}: Integer // Veweis auf ein Objekt (z.B. Baum)
{Name}: VarChar(32) // Name des Attributs (z.B. Höhe)
{Datentyp}: Integer; // 0 = Ganzzahl, 1 = Fließkomma, 2 = Text
{Laenge}: Integer; // bei Ganzzahl = Anzahl der stellen, bei Text Anzahl der Buchstaben
{Nachkomma}: Integer; // Irrelavant bei Text/Ganzzahl, bei Fließkomma Anzahl der Nachkommstellen

1. Normalform sollte klar sein (Werte der Attribut sind atomar, Primärschlüssel vorhanden)

Schlüsselkandidaten sind: {AttributId}, {ObjektID, Name}
NichtschlüsselAttribut sind: {Datentyp, Laenge, Nachkomma}

2. Normalform da die Nichtschlüsselattribute alle von den Schlüsselkandidaten abhängen (z.B. ObjektID+Name bestimmt eindeutig den Datentyp

Gilt die 3. Normalform?
Laut wiki darf kein NA von einem anderen NA abhängen: Nachkomma hängt aber vom Datentyp ab oder nicht? (bzw. im Grunde ist es egal was drinsteht)

Vill kann mir ja jemand da weiterhelfen der sich besser auskennt Ich blick da gerade nicht durch.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: 3. Normalform?

  Alt 2. Jun 2009, 14:20
Also es geht bei der 3. NF um eine transitive Abhängigkeit. Ein nicht-Schlüsselattribut darf nicht über ein anderes Nicht-Schlüsselattribut ("Determinante") vom Primärschlüssel abhängig sein.
Du könntest also "Nachkomma" als eigene Relation mit Primärschlüssel "Datentyp" auslagern (ggf. Nachkomma dann "NULL" erlauben), wenn für jeden Float-Datentyp eine eindeutig zuordnenbare Anzahl an Nachkommastellen hat (ansonsten wäre es ja nicht transitiv von Datentyp abhängig).
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#3

Re: 3. Normalform?

  Alt 2. Jun 2009, 15:06
Also wenn es transitiv abhängig wäre müsste ich eine neue Relation anlegen. Meine Frage konkret: ist das obige in 3. NF?

Entscheidend ist jetzt:
Hängt also Nachkomma vom Datentyp ab?

Wenn Datentyp = String oder Ganzzahl dann hängt es NUR davon ab.
Wenn Datentyp = float dann hängt es zusätzlich vom Attribut ab (Höhe = 2 Nachkommastellen, Durchmesser = 3).

Demnach würde ich sagen Nachkomma hängt von dem Datentyp UND dem Attribut ab -> Die Tabelle ist so in der 3. NF.

Kannst du das so bestätigen?

Dein Tabellenaufbau:
Wenn ich jetzt Nachkomma in eine extra Tabelle auslagere dann muss ich in der Attributtabelle darauf verweisen (jedenfalls wenn das Attribut eine Fließkommzahl ist).
Problem ist dann -> in der Tabelle Nachkomma muss kein Eintrag vorhanden sein, bzw. in der Attributtabelle kann der NULL wert eingetragen sein (daher Interpretation d.h. NULL-Wert -> 0)

Würde ich ungerne machen und auch vermeiden wenn meine Tabelle in 3.NF wäre (wo ich mir z.Z. unsicher bin)
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#4

Re: 3. Normalform?

  Alt 2. Jun 2009, 15:13
Zitat von brechi:
Entscheidend ist jetzt:
Hängt also Nachkomma vom Datentyp ab?

Wenn Datentyp = String oder Ganzzahl dann hängt es NUR davon ab.
Wenn Datentyp = float dann hängt es zusätzlich vom Attribut ab (Höhe = 2 Nachkommastellen, Durchmesser = 3).

Demnach würde ich sagen Nachkomma hängt von dem Datentyp UND dem Attribut ab -> Die Tabelle ist so in der 3. NF.

Kannst du das so bestätigen?
Ah okay. So ist die Sache schon klarer. Nachkomma ist also bei String/Integer egal (also "NULL" z.B.), und wird sonst durch eine Kombination von Attribut und Datentyp eindeutig definiert.
Dann stimmt alles und Du hast die 3. NF
Und da hier auch mindestens ein Nicht-Schlüsselattribut mit drin hast und in 3. NF bist, bist Du automatisch in 4. und 5. NF

Viele Grüße
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: 3. Normalform?

  Alt 3. Jun 2009, 21:26
Ich hoffe, die Frage nach der 3NF ist nur theoretischer Natur. Denn es *nicht* das Ziel einer guten DB, die 3NF auf Deibel komm raus zu designen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: 3. Normalform?

  Alt 3. Jun 2009, 21:34
Mir hilft es bei DB-Sachen immer, das Problem grafisch in einem ERM (Entity-Relationship-Model) darzustellen. Dazu ist eine Schreibtafel am Besten geeignet. Nimm dir ein Blatt Papier und überführ das ganze mal in ein Diagramm. Dann wirst du auch sehen, bei welchen Relationen du eine neue Tabelle einfügen musst, bei 1:n-Relationen wo der entsprechende Foreign Key hingehen muss etc.

Und btw. finde ich persönlich die 4. und 5. NF eher theoretischer Natur.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz