Taurus: Normalisierung

Hallo ihr da draussen,
bin gerade nen bißchen am rumprobieren, einen O-Shop zu bauen.

Jetzt geht es mir um die normalisierung der Kundendaten.
Bis her ist die tabelle so aufgebaut:

id species species_confirm title company gname sname position street street_nr plz city country phone fax mobil mail homepage newsletter status in_time activierungscode

id(wird auch als Kundennummer genommen)
species bezeichnet die Kundenart(privat,wiederverkäufer,etc)
species_confirm(Wenn der Kunde Wiederverkäüfer eingibt,wird er überprüft, dann manuell(Backend) auf 1 -> Wiederverkäufer gesetzt)
status (auf 1 gesetzt wenn bestätigungsemail bestätigt wurde)
in_time(Datumdes Anmeldens)
activierungscode(activierungscode für bestätigungsmail)

ich hatte es mir jetzt so gedacht:
T1
id title, company, gname, sname, position, street, street_nr, plz, city, country, phone, fax, mobil, mail, homepage

T2
id, user_id, activierungscode, status

T3
id, user_id, species, species_confirm

T4
id, user_id, newsletter

logindaten habe ich bereits in eigener tabelle

Wäre das ganze so richtig? Wo packe ich die in_time denn dann hin?

Danke an all diejenigen die sich die Mühe hier in diesem Forum machen, und sich mit so schwierigen Fällen wie mir, abgeben.

Schönes WE
Taurus

  1. Ahoi,

    vielleicht hilft es mehr, die foreign-Keys der tabellen zu benennen und die Relationen 1:n, n:m, denn die ganzen Spaltennamen. Und wenn die Tabellen statt Nummern aussagekräftige Namen hätten?

    Dank und Gruß,

    frankx

    1. Ahoi,

      vielleicht hilft es mehr, die foreign-Keys der tabellen zu benennen und die Relationen 1:n, n:m, denn die ganzen Spaltennamen.

      Sorry, vertsehe nur Banhof! Könntest Du das bitte noch mehr erläutern?

      Und wenn die Tabellen statt Nummern aussagekräftige Namen hätten?

      Klar, hatte ich auch so gedacht, dachte wenn ich noch die namen hinschreibe,verwirre ich Euch noch mehr

      Gruß und Dank
      Taurus

      1. Ahoi,

        »» vielleicht hilft es mehr, die foreign-Keys der tabellen zu benennen und die Relationen 1:n, n:m, denn die ganzen Spaltennamen.
        Sorry, vertsehe nur Banhof! Könntest Du das bitte noch mehr erläutern?

        Kennst Du http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)?

        »» Und wenn die Tabellen statt Nummern aussagekräftige Namen hätten?
        Klar, hatte ich auch so gedacht, dachte wenn ich noch die namen hinschreibe,verwirre ich Euch noch mehr

        Aber Kategorisierung hilft doch immer.

        Dank und Gruß,

        frankx

  2. yo,

    wie bereits erwähnt, sind deine bezeichnungen für tabellen und spalten nicht gut, sie sollten selbsterklärend sein. und bei attributen wie sname und gname kann ich nicht unterscheiden, was das sein soll. dazu kommt noch, das es nicht das eine daten-design gibt, sondern man dazu immer die fachlichkeiten kennen muss, die du abbilden willst. ohne dieses wisses kann man dir nicht wirklich effektiv helfen, weil es immer eine sehr individuelle sache ist. ein beispiel dafür ist zum beispiel, können deine kunden nur eine telefonnummer haben oder mehrere. je nachdem verändert sich das design (1.Normalform).

    es nützt uns also wenig, wenn wir mit schlecht benannten attributen und tabellennamen wie t1 etc. maltretiert werden, sondern wir bräuchten eben mehr einblick in die fachlichkeit. zum anderen mag ich "id" als primarykey bezeichner nicht sonderlich. ich würde zusätzlich immer noch den tabellennamen mit einem unterstrich hinzufügen, dann weiss ich immer gleich, um welche tabelle es sich handelt bei den primary key, zumal ich persönlich auch die fremdschlüssel anders bezeichne. des weiteren schreibst du die spaltennamen in englisch, aber ist PLZ nicht ein deutsches wort ? wenn mich nicht alles täuscht, wäre zipcode besser geeignet dafür.

    Ilja

    1. Hallo Ilja,
      danke das für deine Antwort.
      Wie schon gesagt, haben die Tabellen bei mir in wirklichkeit andere Namen.
      sname und gname benutze ich schon seit min. 10Jahren für formularfelder, Givenname(Vorname) und Surname(Nachname).
      Über das thema id als bezeichner könnte man IMHO streiten, ich habe das bis jetzt nie Probleme gehabt, da ich normalerweise weiss, welche Tabelle ich auslese. Aber ist wohl Geschmakssache.
      Mit PLZ hast Du natürlich recht, habe es aber auch vor in zipcode zu ändern.

      Wärde mich jetzt erstmal so dran machen wie geschrieben, wie gesagt es ist erstmal zum testen, und ich denke mal das mir da eh noch mind. 1000 Sachen auffallen die nicht passen, wollte halt nur mal nachfragen ob mann es so machen könnte, oder ob es totaler Schwachsinn ist.

      Danke Euch allen nochmals
      grüße
      Taurus

      1. yo,

        sname und gname benutze ich schon seit min. 10Jahren für formularfelder, Givenname(Vorname) und Surname(Nachname).

        nun ja, metadaten dienen auch der beschreibung der entitätstypen und sollten eigentlich nicht nur für dich selbsterklärend sein, sondern nach möglichkeit für viele. und daran ändert auch die tatsache nichts, dass es schon 10 jahre anders genutzt wurde. also mein tipp ist, bezeichner zu benutzen, die man gut verstehen kann, ohne dass man es selbst entworfen hat. vorname und nachname, bzw. in englisch klingt für mich wesentlich klarer als gname und sname. natürlich ist es schwieriger, von liebgewonnenen strukturen los zu lassen. aber in diesem falle wäre es meiner meinung nach ein mehrwert, da es für mehr personen verständlicher wird.

        Über das thema id als bezeichner könnte man IMHO streiten, ich habe das bis jetzt nie Probleme gehabt, da ich normalerweise weiss, welche Tabelle ich auslese. Aber ist wohl Geschmakssache.

        ist meistens eher eine entscheidung des persönlichen geschmacks, da gebe ich dir recht, sollte es aber nicht sein. auch hier gilt es, die "ich perspektive" zu wechseln und eine mehr allgemeine sichtweise anzunehmen. wenn ich den spaltenname id lese, kann ich damit nicht viel draus schließen, ist es ein fremdschlüssel oder primarykey und von welcher tabelle kommt er. nimmt man den tabellennamen ins boot und setzt präfixe wie pk_tabellename oder fk_tabellename habe ich alle mit den spaltennamen schon wesentlich mehr infos. ist doch auch ein mehrwert ohne wirklich mehr aufwand oder ?

        ich denke mal das mir da eh noch mind. 1000 Sachen auffallen die nicht passen, wollte halt nur mal nachfragen ob mann es so machen könnte, oder ob es totaler Schwachsinn ist.

        sicherlich gibt es verschiedene ansätze, eine umgebung zu modellieren und solange du alles abbilden kannst, was du brauchst, ist es auch ein gangbarer weg. aber dein ansatz, erstmal zu entwerfen und dann zu schauen, ob hinten raus probleme kommen ist nicht ratsam. daten-design braucht zeit, aber nur selten sind die betroffenen auch bereit, diese zeit zu investieren. und das erzeugt meistens hinten rum richtige probleme.

        Ilja