Stell dir vor, du hast noch andere Tabellen. Vielleicht eine, in der irgendwelche Produkte stehen, die die Firmen herstellen. Und noch eine, in der die letzten Artikel stehen, die sie gekauft haben oder so.
(Ist egal, wenn das bei dir nun keinen Sinn macht, ist ja nur ein Beispiel. Beliebig erweiterbar.)
Und überall steht der Name als einziges Erkennungsmerkmal drin, dann hast du folgende Nachteile:
- Die Verknüpfung über Strings ist langsam
- verschiedene Leute mit dem gleichen Nachnamen können nicht auseinander gehalten werden
- Du hast ein Problem, wenn Jemand z.B. heiratet und der Name sich ändert.
Vielleicht ist deine Anwendung so klein, dass das alles nicht sehr ins Gewicht fällt, aber das ist kein Grund, es von vorneherein "falsch" zu machen.
Gruß,
ministry
PS: Der Hinweis zu Joins war deswegen, weil du offensichtlich nicht wusstest, wie man die Tabellen dann beim Auslesen verknüpft, um die Daten gleich zusammen mit dem Namen auszulesen.
okey .. vielen dank für die hilfreiche antwort.
ist es nun aber so daß jede tabelle in meiner datenbank ein eigenes running number feld bekommt?
es ist doch so gemeint, daß ich beim erzeugen eines neuen kunden dann die running number der kunden "haupttabelle" in die jeweiligen tabellen wie kontonummer und leiferanten eintrage richtig.
also quasi eine ID die die kunden zusätzlich zum namen identifiziert wird an die anderen tabellen gegeben?
ich verstehe eimälig schon dwie man per identifier und durch joins leichter effizientere sql abfragen machen kann.
aber ich habe probleme damit zu verstehen wie ich diese identifier bei dem eintragen neuer kunden und zB dem nachträglichen eintragen einer bankverbindung zu einem kunden hinzufüge.
Du kannst einfach das Konto einfügen. mysql_insert_id() liefert dir die zuletzt automatisch angefügte ID, und die kannst du dann in eine Spalte Konto bei dem Kunden eintragen.
Falls ein Kunde mehrere Konten haben könnte (1:n-Beziehung), dann wäre es sinnvoller, die Kunden-Id in eine Spalte in der Kontotabelle zu schreiben.
Und wenn es schließlich eine n:m beziehung wäre (das Konto ist ein schlechtes Beispiel, besser wären z.B. Fotos und Stichworte dazu. Jedes Foto kann viele Stichworte haben, und jedes Stichwort kann mehrfach vorkommen), dann bräuchtest du dafür eine Lookup-Tabelle (also eine für die Fotos, eine für die Stichworte, und eine zum "Nachschlagen", wo dann Foto-ID und Stichwort-ID drinsteht).
sorry ich begreif das nicht.
es ist doch sinnlos .... es ist doch wirklich in dem kontofall wirklich sinnlos die running number des kontos in die kundentabelle einzutragen. ich kann doch sowas von eindeutig durch die kontonummer identifizieren. wenn ich mehrere konten pro kunde habe ist klar.
nehmen wir mal den fall an ich trage einen lieferanten nachträglich ein. dann wähle ich erst den kunden aus zu dem ich den lieferanten hinzufügen will. so ... der lieferant, wenn er eingetragen ist, bekommt eine neue ID(running number) und diese frag ich dann ab und trag diese nummer in die kundentabelle und lieferanten ID ein ja? und diese id würde ich dann mit dem mysql_insert_id() statement bekommen da die lieferanten ID die zuletzt eingetragene ID ist.
das wäre dann der fall - nur einen lieferanten pro kunden.
bei einer beziehung von mehreren lieferanten pro kunde würde ich wiederum die kunden ID in der lieferantentabelle eintragen richtig?
Zwei Dinge sind unendlich: das Universum und die menschliche Dummheit;
aber bei dem Universum bin ich mir noch nicht ganz sicher. (Albert Einstein)
Bei dem Konto könnte man es wohl tatsächlich so machen, da die Kontonummer eindeutig ist. Allerdings ist es doch auch nicht weniger Aufwand. Ob du nun zweimal die Kontonummer drin hast oder ne ID.
Zu den Lieferanten: Prinzipiell ja, aber das musst du dir vorher überlegen. Wenn es sein kann, dass es mehrere Lieferanten pro Kunde gibt, dann muss die Kunden-ID zu den Lieferanten. Wobei sich das schon eher wieder nach einer n:m Beziehung anhört (die Lieferanten können ja auch bei mehr als einem Kunden vorkommen schätze ich).
Was machst du denn, wenn du zwei Kunden mit gleichem Namen hast (z.B. Peter Müller ich persönlich kenne 7 Leute, die so heißen)?
Du brauchst ein eindeutiges Identifikationsmerkmal, z.B. wie
Personalausweis-Nummer, Sozialversicherungsnummer ... oder
eine eigene ID.
ich hab nun dank euch den sinn des ganzen gut begriffen.
was mir als letztes noch nicht ganz klar ist, wie ich nun die nummern eintrage.
angenommen ich lege einen komplett neuen kunden an, in diesem fall wird dann alles auf einmal in ein formular eingetragen.
also ich trage den namen die sonstigen standartwerte die in die kundentabelle gehören ein, genauso wie die lieferanten und bankverbindung.
wenn ich dort nun neue IDs für die lieferanten, den einkauf usw vergebe, wie bekomme ich diese dann in die kundentabelle.
ich mache also als erstes den INSERT in die kundentab, danach zB in die liefeantentab und dann muß ich durch mysql_insert_id() die ID des lieferanten herausfinden, um den dann in die kundentab einzutargen ..... und das selbe das für den einkauf und die buchhaltung!?!
Zwei Dinge sind unendlich: das Universum und die menschliche Dummheit;
aber bei dem Universum bin ich mir noch nicht ganz sicher. (Albert Einstein)
wenn ich nun einen kunden mit mehreren konten habe ...
lege ich dann für jedes konto ein neues feld an?
oder speicher ich in der kundentabelle in einem feld mehrere konto IDs?
Zwei Dinge sind unendlich: das Universum und die menschliche Dummheit;
aber bei dem Universum bin ich mir noch nicht ganz sicher. (Albert Einstein)
Kommentar