+ Antworten
Ergebnis 1 bis 6 von 6

Thema: Aufbau Datenbank(en)/Tabelle(n) & 3. Normalform ?

  1. #1
    TP-Member graf_dracula ist auf einem guten Weg Avatar von graf_dracula
    Registriert seit
    Oct 2006
    Ort
    München
    Beiträge
    74

    Aufbau Datenbank(en)/Tabelle(n) & 3. Normalform ?

    Hallöchen,

    ich bin dabei eine kleine Community zu planen und zu programmieren. Da ich
    nicht weiß, wie groß sie einmal werden wird, ich jedoch logischerweise hoffe,
    dass Sie Sehr groß wird :-) möchte ich natürlich vernünftig programmieren,
    um mir später Arbeit durch Fehler zu ersparen.
    Die angemeldeten user sollen ein eigenes Profil anlegen können (wie außergewöhnlich ).
    Die Userdaten, Passwort, Loginname, Strasse, Lieblingsessen etc. sollen in
    diese Tabelle hinein - als eine ganz grobe Planung gebe ich mal 50 einzelne
    Punkte an, wobei 1 Punkt wie z.B. "Lieblingsessen" eine Auswahl aus sagen
    wir 20 verschiedenen Ländern sein soll (Italienisch, Chinesisch ...) - das
    könnte man als ein einziges Attribut als Array abspeichern - so die Idee.
    Ein Freund sagte mir, dass ich eine Datenbank der 3. Normalform benötigen
    würde und gab mir den folgenden LINK, jedoch musste ich feststellen,
    dass ich das glaub nicht so ganz checke wozu und warum das ganze.
    Wenn ich mir das mit dem Aufteilen durchlese, versteh ich ja noch, dass ich
    z.B. bei einem Bestellschein extreme Redundanz habe wenn ich bei jedem
    einzelnen Posten die Auftragsnummer erneut mit abspeichere. Bei einer
    user-Datenbank wäre dass dann ja z.B. eine Unterteilung in Bundesland,
    Ort, männlich/weiblich ... Das ganze könnte man aber fast unendlich
    weitertreiben und somit in 20 Tabellen aufspalten ... eine wie starke
    Aufteilung ist also sinnvoll ???
    OK, mehrere Tabellen um Redundanz zu vermeiden versteh ich ja noch,
    aber folgende Sachen sind mir unklar:

    1.) In wie viele Tabellen unterteile ich am sinnvollsten?
    2.) Wenn in ein paar Jahren in der Community sagen wir mal 10.000, 100.000
    oder mehr user angemeldet sein sollten, wie groß ist dann der Unterschied in der
    Zeit bei einer Suchfunktion ob ich ALLES in EINE einzige Tabelle
    hineinschreibe oder z.B. in 3 oder mehr Tabellen aufgeteilt habe.
    3.) Kann ich bei Verwendung mehrerer Tabellen in allen Tabellen als
    Zuordnung die gleiche User_ID vergeben als Primärschlüssel ?
    4.) Was ist nun eigentlich der extrem gravierende Unterschied zwischen
    den 5 Normalformen ? (Ich check das irgendwie nicht)
    5.) Kennt jemand noch einen anderen Link, wo das anders oder genauer
    erklährt wird, was der Sinn und Zweck und Unterschied der Normalformen ist ?

    Hier mal ein Bild des Begins der Tabelle wie ich sie mir bisher vorstelle:
    .
    .

    " ... da ist Vakuum drin ! " ... aha, sehr Interessant ... nimm doch besser farbiges Vakuum, dann siehste wenn's raus ist
    .
    .

  2. #2
    TP-Urgestein webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von webcreate
    Registriert seit
    Nov 2003
    Ort
    NRW
    Beiträge
    11.660
    1.) In wie viele Tabellen unterteile ich am sinnvollsten?
    So viele, bis die 3NF erreicht ist.

    2.) Wenn in ein paar Jahren in der Community sagen wir mal 10.000, 100.000
    oder mehr user angemeldet sein sollten, wie groß ist dann der Unterschied in der
    Zeit bei einer Suchfunktion ob ich ALLES in EINE einzige Tabelle
    hineinschreibe oder z.B. in 3 oder mehr Tabellen aufgeteilt habe.

    Das hängt leider nicht nur von der Normalisierung ab, wodurch das schwer zu beurteilen ist. Wobei der zeitliche Aspekt hier nicht der Hauptgrund ist.

    3.) Kann ich bei Verwendung mehrerer Tabellen in allen Tabellen als
    Zuordnung die gleiche User_ID vergeben als Primärschlüssel ?

    Wo liegt da der Sinn?

    4.) Was ist nun eigentlich der extrem gravierende Unterschied zwischen
    den 5 Normalformen ? (Ich check das irgendwie nicht)

    Sollte in den Links erläutert sein. Wobei die 3NF in der Praxis das Maximum ist.

    5.) Kennt jemand noch einen anderen Link, wo das anders oder genauer
    erklährt wird, was der Sinn und Zweck und Unterschied der Normalformen ist ?

    http://www.tinohempel.de/info/info/d...alisierung.htm
    http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)
    Gruß Mark

    webcreate IT SOLUTIONS
    www.webcreate-nrw.de

    Photoblog....|....flickr

  3. #3
    TP-Member graf_dracula ist auf einem guten Weg Avatar von graf_dracula
    Registriert seit
    Oct 2006
    Ort
    München
    Beiträge
    74
    OK,

    Normlform(en), damit in jedem "Treffpunkt" von Zeile und Spalte nur ein Attribut steht und um Redundanz zu vermeiden.

    Jetzt wieder ein praktisches Beispiel:

    so ist's doof:
    user_ID_|_username_|_userpassword_|_Lieblingsessen_|_etc.
    --------------------------------------------------------------------------
    0815___|_test1____|_4711_______|_[italienisch]-1___|____________
    ______________________________|_[chinesisch]-0___|____________
    ______________________________|_[französisch]-0__|_____________
    ______________________________|_[amerikanisch]-1_|_____________
    4711___|_test2____|_0815_______|_[italienisch]-0___|____________
    ______________________________|_[chinesisch]-1___|____________
    ______________________________|_[französisch]-1__|_____________
    ______________________________|_[amerikanisch]-1_|_____________

    Besser so:
    user_ID_|_username_|_userpassword_|_essen-ital_|_essen-chin_|_essen-franz_|_etc._____
    -----------------------------------------------------------------------------------------
    0815___|_test1____|_4711_________|______1___|______0____|_____0______|_________
    4711___|_test2____|_0815_________|______0___|______1____|_____1______|_________

    Jetzt erzählt mir aber nicht, dass es sinnvoll wäre eine eigene Tabelle für Lieblingsessen zu machen.
    Abhängigkeiten zu den anderen Spalten kann ich da nicht wirklich erkennen.

    Was ich einsehe ist z.B. wenn es eine Spalte "Postleitzahl" gibt, dass ich eine
    extra Tabelle mache, in der die 16 Bundesländer stehen und die Zuweisung
    der Postleitzahl, falls sich daran mal was ändern sollte.

    Aber würde es Sinn machen und wenn ja warum, dass ich für die
    verschiedenen Lieblingsessen z.B. eine eigene Tabelle mache anstatt
    dadurch eine etwas längere Tabelle zu erhalten ???

    In einer Firma, mit unterschiedlichen Abteilungen, Projekten, Fahrzeugen,
    Vorgesetzten, Büronummer etc. seh ich es auch noch ein, warum ich in
    mehrere Tabellen aufteile, aber in einem Forum, wo jeder user mehr oder
    weniger für sich allein ist und kein gemeinsames Büro oder Fahrzeug nutzt
    fällt dieser Aspekt doch heraus - oder übersehe ich da eine mögliche
    Notwendigkeit doch in noch mehr Tabellen zu unterteilen ???

    Nehmen wi rz.B. ein Forum wie dieses hier, sind die einzelnen user und ihre
    Attribute auch auf mehrere Tabellen aufgeteilt ?
    Eine einzige Tabelle in der einfach für einen user genau eine Zeile existiert,
    wo jedes Attribut eine einzelne Spalte ist, so wie die, die ich oben gezeigt
    habe müsste doch reichen - oder?
    .
    .

    " ... da ist Vakuum drin ! " ... aha, sehr Interessant ... nimm doch besser farbiges Vakuum, dann siehste wenn's raus ist
    .
    .

  4. #4
    TP-Urgestein webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von webcreate
    Registriert seit
    Nov 2003
    Ort
    NRW
    Beiträge
    11.660
    Bei Deinem Bsp sehe ich keine Normalisierung ... wozu hier nun auch, ich sehe da keine weiteren Abhängigkeiten.
    Gruß Mark

    webcreate IT SOLUTIONS
    www.webcreate-nrw.de

    Photoblog....|....flickr

  5. #5
    TP-Member graf_dracula ist auf einem guten Weg Avatar von graf_dracula
    Registriert seit
    Oct 2006
    Ort
    München
    Beiträge
    74
    Danke ... da bin ich aber froh, dass ich mich darum nicht weiter kümmern muss.

    Eine Frage hätte ich aber noch:

    Kann man eine maximal Größe einer Datenbank angeben, die man nicht
    überschreiten sollte ???
    Also eine Art Berechnung aus Zeilen * Spalten müsste es ja dann eher sein.

    Wenn ich mir z.B. eine Datenbank aus 1.000.000 Usern mit jeweils 1000 Attributen
    vorstelle und ich möchte per Suchfunktion alle User aufgelistet bekommen,
    die 3, 5 oder 20 bestimmte Attribute erfüllen ... wie sehr zwinge ich den
    Datenbankserver damit in die Knie ???
    Oder sind die normalerweise so schnell und gut heutzutage, dass die auch
    so etwas ohne Probleme innerhalb von maximal 5 sec. erledigen ?
    Oder kann & muss man da dann doch wieder sinnvollerweise in einzelne
    Tabellen unterteilen ?
    .
    .

    " ... da ist Vakuum drin ! " ... aha, sehr Interessant ... nimm doch besser farbiges Vakuum, dann siehste wenn's raus ist
    .
    .

  6. #6
    TP-Urgestein webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von webcreate
    Registriert seit
    Nov 2003
    Ort
    NRW
    Beiträge
    11.660
    Zum oberen Fall ...
    Eine Änderung wäre in soweit sinnvoll wenn man nach dem Lieblingsessen sortieren/suchen will. Alles in einer Zelle bedarf dann einer Analyse in PHP und nicht direkt in der DB, so wie im ersten Fall kann es zu unnötigen Traffic führen.

    Eine Begrenzung in der Tabelle ist mir so nicht bekannt, dass würde ja auch zu Problemen bei Suchen, Primärschlüsseln usw. führen.
    Ab einer bestimmten Größe kann man auch Cluster verwenden, aber das ist schon ein recht hohe Niveau.

    Die Leistung einer DB hängt u.a. auch von der Leistung des Servers ab. Weiterhin sollte man bei DBs schon auf entsprechende Indizes achten. Bei solchen Größen muss man schon an mehreren Stellen optimieren, damit alles rund läuft.
    Gruß Mark

    webcreate IT SOLUTIONS
    www.webcreate-nrw.de

    Photoblog....|....flickr

+ Antworten

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51