PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Normalisierung von Datenbanken


astanoth
2005-11-29, 19:54:46
Moin,
ich hab mal eine Frage zur Normalisierung von SQL-Datenbanken.

Wie weit sollte man da gehen? Bis es nicht mehr weiter geht?
Beispiel: ich habe eine Datenbank aufgefüllt mit Personendaten. Gemappt sind Dinge wie Geburtsort o.ä. Es kommen jedes Jahr 100-200 neue Einträge hinzu.
Wäre es jetzt übertrieben, Vornamen und Nachnamen zu mappen? Theoretisch sehr sinnvoll, aber rein statistisch wird die zusätzliche Tabelle nicht viel an Platz/Performance bringen.

Mappen klingt doof: ich meine damit das Normalisieren einzelner Bausteine.
Also: Vorname bekommt eine ID und bezieht sich den Wert aus der m_vorname-Tabelle.
Das würde einiges an "Müller" und "Meier" sparen - aber in dem Maße sinnvoll?

Danke
astanoth

ScottManDeath
2005-11-29, 20:02:34
Du könntest mal die einzigartigen Namen zählen und sehen wieviele das im Vergleich zu allen sind. Unabhängig davon denke ich aber dass es bei den Vor/Nachnamen nicht soviel bringt, da diese meistens(?) gemeinsam benötigt werden und eine weitere Indirektion u. U. die Leistung verringert.

Du könntest es testen indem Du alle externen Tabellen als Views machst und dann intern umstellst und siehts was es bringt ;)

astanoth
2005-11-29, 20:54:11
Hätte ich genug Daten, um es zu testen, dann würde ich es tun. Soll ich mir jetzt randommäßig Daten erzeugen lassen? ;D

Ich hatte jetzt auf ein "JA, lohnt sich definitiv!" oder ein "Nein, lohnt sich auf keinen Fall" gehofft ;)

Coda
2005-11-29, 21:33:06
Du sprichst hier um Datensätze mit ~1000 Einträgen und machst dir ernsthaft sorgen um Speicherplatz?

Nein das lohnt sich nicht! Nichtmal den Ort oder ähnliches würde ich da seperat ablegen, außer man will dort für alle Leute auf einmal etwas ändern können.

Silpion
2005-12-01, 21:53:47
In der Praxis geht man selten weiter als zur 3. Normalform, teilweise verwirft man die 3. NF nachträglich sogar wieder, wenn man auf Geschwindigkeit optimiert.

Bei den wenigen Einträgen in der Tabelle wirst du allerdings nicht weiter optimieren müssen.

astanoth
2005-12-01, 22:21:42
Ok, Danke.
Ich dachte nur, es bricht die Welt zusammen, wenn ich nicht bis ans Ende normalisiere.
Ich habe auch mal nachgeguckt bei den 1000 Datensätzen, die ich nun doch schon vorliegen habe. Es sind 643 verschiedene Vornamen und 821 verschiedene Nachnamen. Macht also wenig Sinn.
(Nein, ich habe sie nicht mit "Edding am Monitor" gezählt ;))

Aber noch eine generelle Frage: Wieviel Performance würde es kosten, wenn ich so etwas mappen würde? Bemerkbar ist es irgendwie nicht, nachdem was ich so ausprobiert habe.

Das werden wohl doch eher die Fragen, die ab 10000 oder 100000 Datensätzen sinnvoll sind ;)

Und noch eine Frage: Gibt es ein Ranking, wo ich in Sachen Datensicherhet bei Hostern am Sichersten bin? Nicht im Sinne des Backups, sondern im Sinne des Datenschutzgesetzes. Allein schon eine gut gepflegte Personendatenbank (alle kaufkräftig) mit 1000 Einträgen dürfte doch schon sehr verlockend sein oder?

Silpion
2005-12-01, 22:37:31
Was genau meinst du mit "mappen"? Indices setzen? Die sind nur sinnvoll, wenn du anhand der indizierten Attribute die Tabelle durchsuchen musst.

Coda
2005-12-01, 22:50:50
Das werden wohl doch eher die Fragen, die ab 10000 oder 100000 Datensätzen sinnvoll sindNein. Das sind Peanuts für Datenbanken.

Trap
2005-12-01, 23:08:05
Bei dem Thema (Datenbankperformance) fällt mir wieder ein lustiger Vortrag ein:
http://tykje.com/talk/stock.html

Hilft zwar zum Thema nicht weiter, ist aber ganz lustig zu lesen, vor allem wenn man versucht den Code am Ende zu verstehen :)

5tyle
2005-12-03, 00:24:56
Man kanns mit der Normalisierung auch übertreiben.

Ich finde es ist aus reiner Erleichterung eines Zugriffs auf die Datensätze besser, weniger zu normalisieren, und das Datenmodell so weniger komplex zu halten. Hängt eben vom Anwendungsbereich ab.

Misda
2005-12-03, 11:32:55
Also, ich normalisiere meist bis zur 3. Normalform. Ich finde, dies ist auch das Maximum.