• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Normalisierung

webber979

Neues Mitglied
Hallo Leute bin grad dabei meine MYSQL Tabellen zu konfigurieren und wollte fragen ob es wirklich wichtig ist eine Normalisierung einzurichten, da ich viel mit select option feldern beim Formular halt gearbeitet habe und es desshalb ein grßer( viellecht unnützer Aufwand).
1. Was sind die Vorteile
2. Was die Nachteile
3. Sollte man sich den Aufwand gönnen wenn man mit vielen selctions gearbeitet hat.
4. Wann benutzt man eine Denormalisierung?
5. Was benutzt z.B www.facebook.de-- --- ---www.thomann.de
Danke im Vorraus
Es wäre richtig cool wenn ihr ohne sehr komplizierte Fachdrücke (wie referenzielle Intergrität) das ganze erklären könntet.
webber979 :D
 
Werbung:
Normalisierung verhindert sehr einfach gesagt, dass man identische Daten mehrfach speichert und somit zum einen Platz vergeudet und zum anderen große Probleme hat, diese bei Änderungen konsistent zu halten. Beispiel eine Famile, die zusammen in einer Wohnung wohnt. Wenn du die Adresse bei jeder Person speicherst, dann ist das nicht normalisiert. Man speichert also die Adresse separat und verweist nur auf diese. Wenn alle 12 Familienmitglieder in eine neue Wohnung ziehen, musst nur 1x ändern.
 
Bevor ich alles noch mal schreibe verweise ich mal auf diesen, wie ich finde sehr gut erklärten Beitrag:
MySQL - Normalisierung

Facebook unterhält bestimmt mehr als eine Datenbank, bei dem Umfang, und normalisiert die Daten wie jeder Profi auf dem Gebiet der Datenbankanwendungen.
Bei einem Shop ist es genauso.
 
Werbung:
Hallo,

Normalisierung ist keine optionale Möglichkeit in MySQL, es ist ein grundlegendes strukturelles Konzept einer jeden Datenbank.

Bei einer nicht normalisierten Datenbank riskiert man Redundanzen, Performanceeinbußen und eine nicht nachvollziehbare Struktur (bspw. wenn jemand anderes deine Datenbank wartet). In erster Linie gilt jedoch das vermeiden von Redundanzen, sprich der mehrfachen Sicherung ein und des selben Wertes.

Facebook und viele andere große Firmen im Internet dürften spezielle Datenbanksysteme nutzen. Bei solchen Ausmaßen geht es zumeist um Kosten und im Bezug auf DB-Server um das Abwägen von Serverleistung und Speicherplatz (beides kostet). Evtl. nimmt man dann Redundanzen in Kauf um die Serverleistung zu schonen, wenn dies die Ausgaben senkt. Das wäre bspw. ein Grund für eine Denormalisierung.

Dennoch wird jede Datenbank, die du in CMS und sonstigen Websystemen findest, in irgendeiner Art und Weise normalisiert sein.

Ich rate zu eine Normalform. Im Netz findest du diverse Beispiele wie aus einer redundanten eine normalisierte DB wird.

Grüße
 
Normalisierung kann abstrakt werden und die Abfragen können kompliziert werden, zumal du auch immer die Performance im Auge behalten musst. Also welche Indizes du setzt.

Ich kann dir ein Beispiel aus der Praxis sagen. Die ersten online Shopsytem, waren sehr einfach. Es gab Produkte, Produktgruppen und Kunden. Die Produkte hatten Eigenschaften, wie z.b. das Herstellungsjahr oder die Beschreibung, aber auch eine Farbe oder eine Größe. So eine zweidimensonale Tabelle hatte ich mal vorgefunden, das war früher auch ok, da hatte jedes Produkt immer nur eine Ausprägung (Fachbegriff). Dann wurden auf einmal T-Shirts in verschiedenen Größen im Laden gelistet. Dann wurde für jede Größe (S/M/L) ein neuer Datensatz eingegeben und hinter die Bestell Nummer der Buchstabe für die Größe gemacht. Seit es T-Shirts in Unterschiedlichen Farben verkauft werden, ist das Chaos gross. Von jedem Produkt gibt es 3 Größen und 4 Farben = 12 Datensätze.

Und um für diese Bedingungen Shops zu erstellen, braucht man ein System, dass die Produkte in variablen Ausprägung darstellen kann. D.h. du brauchst eine Datenbank für die Ausprägungen und eine für deren Werte (dann noch eine für die Texte, für die Ausprägungen und die Werte in verschiedenen Sprachen) und dann eine für die Ausprägungen der Produkte. D.h. aus einer Tabelle sind vier (plus für die Bezeichungen) geworden. Eine Menge Arbeit, aber wenn du schonmal gesehen hast, was für eine Arbeit es ist, eine zweidimensonale Produkttabelle zu pflegen, dann weißt du, dass es sich lohnt.

Es gibt aber sicher auch Ausnahmen, wo es sich nicht lohnt zu normalisieren.
 
Werbung:
Schau mal hier: http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/chap4.htm
Dieser Artikel trägt den Titel: "Der Königsweg: Normalisierung".
Wenn hier in diesem Thread von absichtlicher Nicht-Normalisierung gesprochen wird, dann geht es um Spezialfälle, bei denen sehr große Datenmengen verwaltet werden. Einige 100.000 DS sind aber keine sehr große Datenmenge! Außerdem müssen bei Nicht-Normalisierung Vorkehrugen getroffen werden um Zweideutigkeiten zu vermeiden; das ist eine ziemlich aufwendige Sache, die man nur leisten kann, wenn man die Normalisierung sehr gut verstanden hat.
Referenzielle Integrität bedeutet, daß es zwischen einer übergeordneten und einer untergeordneten Tabelle eine definierte Beziehung gibt.
Klassisches Beispiel: Eine Tabelle "Kundenadressen" und eine Tabelle "Rechnungen"
In "Rechnungen" dürfen nur Kundennummern vorkommen, die in "Kundenadressen" bestehen. Es darf auch nicht möglich sein, eine Kundenadresse zu löschen, der eine Rechnung zugeordnet ist.
 
Das ist übrigens wieder so ein Punkt, wo es zwar technisch gesehen sicherlich richtig ist, dass Denormalisierung legitim sein kann, wo ich aber die Gefahr sehe, dass viele Leute denken: „Ach, nicht normalisieren ist auch okay und manchmal sogar schneller. Dann mache ich das einfach nicht.“
 
Ich bin momentan dabei meine Datenbank nu Normalisieren.
Bräuchte da jedoch ein klein bisschen Hilfe :)

Die Datenbankstruktur sah bisher folgendermaßen aus:
Code:
einsaetze
+----+------------+---------+--------+--------------+--------+----------+------------+
| id | datum      | uhrzeit | titel  | beschreibung | ort    | personal | alarmstufe |
+----+------------+---------+--------+--------------+--------+----------+------------+
|  1 | 11.11.2011 | 11:11   | TEST 1 | TEST 1       | TEST 1 | 7        | Tel.       |
+----+------------+---------+--------+--------------+--------+----------+------------+
+-----------------+----------------------+--------------+
| fahrzeuge       | feuerwehren          | kraefte      |
+-----------------+----------------------+--------------+
| KdoW, HLF 20/16 | FF TEST 1, FF TEST 2 | Polizei, BRK |
+-----------------+----------------------+--------------+

Habe sie jetz folgendermaßen geändert:
Code:
einsaetze
+----+------------+----------+---------------------+
| id | datum      | uhrzeit  | timestamp           |
+----+------------+----------+---------------------+
|  1 | 11-11-2011 | 11:11:11 | 11-11-2011 11:11:11 |
|  2 | 12-12-2011 | 12:12:12 | 12-12-2011 12:12:12 |
+----+------------+----------+---------------------+

einsaetze_alarmstufe
+----+------------+
| id | alarmstufe |
+----+------------+
|  1 | 1          |
|  2 | 2          |
|  3 | 3          |
|  . | ...        |
|  8 | Tel.       |
+----+------------+

einsaetze_daten
+----+--------+--------------+--------+----------+
| id | titel  | beschreibung | ort    | personal |
+----+--------+--------------+--------+----------+
|  1 | TEST 1 | TEST 1       | TEST 1 | 7        |
|  2 | TEST 2 | TEST 2       | TEST 2 | 16       |
+----+--------+--------------+--------+----------+

einsaetze_fahrzeuge
+----+-----------+
| id | fahrzeug  |
+----+-----------+
|  1 | KdoW      |
|  2 | HLF 20/16 |
|  . | ...       |
+----+-----------+

einsaetze_feuerwehren
+----+-----------+
| id | feuerwehr |
+----+-----------+
|  1 | FF TEST 1 |
|  2 | FF TEST 2 |
|  . | ...       |
+----+-----------+

einsaetze_kraefte
+----+---------+
| id | kraft   |
+----+---------+
|  1 | Polizei |
|  2 | BRK     |
|  . | ...     |
+----+---------+

einsaetze_zuweisung
+----+------------+---------------+-------------+--------------+----------+
| id | einsatz_id | alarmstufe_id | fahrzeug_id | feuerwehr_id | kraft_id |
+----+------------+---------------+-------------+--------------+----------+
|  1 | 1          | 8             | 1           | 1            | 1        |
|  2 | 1          |               | 2           | 2            | 2        |
|  3 | 2          | 2             | 2           | 1            | 1        |
|  4 | 2          |               |             |              | 2        |
+----+------------+---------------+-------------+--------------+----------+

Ich weis jetz nicht Wirklich wie ich das Abfragen soll.

Ich würde jetz per PHP über die ID´s alle Tabellen einlesen aber das geht doch auch mit Joins oder aber wie ??
Weis auch nicht wirklich wie ich dann am einfachsten Datensätze einfüge :(

Danke schonmal.
 
Zuletzt bearbeitet:
Werbung:
Hab jetz mal folgende Abfrage geschrieben.

PHP:
		require("../include/mysql.connect.php");
		$result=mysql_query("
		SELECT 
		  `e.datum`, 
		  `e.uhrzeit`,
		  `e_d.titel`,
		  `e_d.ort`,
		  `e_a.alarmstufe`,
		FROM 
		  `einsaetze e`,
		  `einsaetze_daten e_d`,
		  `einsaetze_alarmstufe e_a`
		ORDER BY 
 	  `einsaetze.datum`
		  AND
		  `einsaetze.uhrzeit`
		DESC LIMIT
		  0, 10 
		") or die(mysql_error());

		$num=mysql_numrows($result);

		mysql_close();

Fehlermeldung:
Code:
Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen bei 'FROM `einsaetze e`, `einsaetze_daten e_d`, `einsaetze_alarmstufe e_' in Zeile 7

Damit komm ich ned klar ;)
 
Zuletzt bearbeitet:
Vielleicht solltest Du schildern, was Du überhaupt erfassen willst. Eine DB stellt einen Ausschnitt aus der Wirklichkeit dar, welche Wirklichkeit willst Du darstellen?
Warum hast Du in der Tabelle "einsaetze" Datum + Uhrzeit + Timestamp, also nochmal Datum + Uhrzeit?
 
Also ersteinmal möchte ich eine Ausgabe der letzten 10 Einsätze machen.

Übersicht:
- Datum
- Uhrzeit
- Titel
- Ort
- Alarmstufe

Dann kann man per übergabe der ID mittels PHP einen Datensatz Detaliert anzeigen.

Details:
- Datum
- Uhrzeit
- Titel
- Beschreibung
- Ort
- Alarmstufe
- Fahrzeuge
- Feuerwehren
- Kräfte

Und aber auch eine Suche das ist der Hauptgrund welhalb ich die Normalisierung gewählt habe damit ich die Suchergebnisse besser Filtern kann.

Bsp.: Suche nach Einsatz im Feb. 2009 mit Kraft_ID "1,2" und Fahrzeug_ID "3,4" und Feuerwehr_ID "5,6" und Suchbegriff "Brand" in Titel, Beschreibung und Ort

Als Beispiel:
http://feuerwehr-emskirchen.de/einsaetze/
 
Zuletzt bearbeitet:
Werbung:
Du kannst davon ausgehen, daß ich nicht viel über Feuerwehreinsätze weiß. Und Du kannst ganz sicher sein, daß ich überhaupt nicht weiß, was Deine Aufgabe ist.
Also ersteinmal möchte ich eine Ausgabe der letzten 10 Einsätze machen.
Die Aussage ist ziemlich sinnlos, das hat mit dem Datenmodell gar nix zu tun.
Um ein Datenmodell zu konstruieren, kannst Du etwa beginnen, indem Du jedes "Ding" aufzählst, das unabhängig von anderen "Dingen" besteht.
Beispiel:
1) Organisationseinheit (Freiwillige Feuerwehr Entenhausen)
Die Organisationseinheiten bestehen unabhängig von Autos oder Einsatzorten. Und hier taucht auch schon die erste Frage auf: gibt es eine Hierarchie von Organisationseinheiten? Also vielleicht Kreisfeuerwehr - Ortsfeuerwehr - Löschgruppe, irgendwas in der Art?

2) Feuerwehrauto
Das Feuerwehrauto besteht auch für sich allein, egal, ob es einer Löschgruppe zugeordnet ist oder ob es jemals an einem Einsatz teilnimmt. Auch hier gibt's Fragen: muß ein Auto immer einer Organisation zugeordnet sein? Ist es wichtig, um welche Art Auto es sich handelt (Mannschaftswagen, Leiterwagen)?

3) Einsatzort
Der Einsatzort besteht auch für sich, selbst dann, wenn es keine Feuerwehr gäbe. Welche Eigenschaften des Einsatzortes sind für Deine Datensammlung wichtig? PLZ? Ortsname? Straßenname? Stockwerk? Gebäudeart? Was wird eingetragen, wenn es kein Gebäude ist, sondern z. B. ein Verkehrsunfall?

Wen Du alle "Dinge" (Entitäten) aufgelistet hast, mußt Du die miteinander in Beziehung setzen. Dafür sind weitere Tabellen erforderlich, die im Allgemeinen nur die Schlüssel der Stammtabellen enthalten. Aber das kommt später.
 
Vor Allem solltest du einen eigenen Thread aufmachen, um dein Problem zu lösen und keinen fremden entern, auch wenn es Inhaltlich dazu passt.

Eine !normalisierte Datenbank ist für mich schon mehr kaputt als lauffähig. Fehler sind vorprogrammiert und die Nachvollziehbarkeit geht gegen NULL
Welcher Art Normalisierung darüber kann man streieten, Minimum 1NF

PS
Wollte bodo natürlich nicht zu nahe treten, aber ein eigenes Thema wäre doch sinnvoller, da ich denke, dass mehr gepostet wird.
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben