Forum: PC-Programmierung Datenbank Korrekt?


von Matze (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich habe vor in nächster Zeit einen WebShop auf HTML,CSS,XML,PHP und
MySQL basis zu erstellen.

Dabei soll es möglich sein Kunden anzulegen, welche Bestellungen
aufgaben können. Diese Bestellungen bestehen aus einer vielzahl von
Artikeln.
Da ein Artikel jedoch auch in vielen Bestellungen vorkommt, habe ich
dies durch die Tabelle "Einzelartikel" zu einer 1 zu n Beziehung
umgeformt.

Die DB ist wohl in 3. Normalform.
Was haltet ihr davon?
Ist sie korrekt?

Grüße
Matze

von (prx) A. K. (prx)


Lesenswert?

Matze schrieb:
> Was haltet ihr davon?

Für Fritz Müller in der Sensengasse reicht es, vorausgesetzt es ist 
nicht die in Wien oder du bist Österreicher. Aber spätestens Kunden mit 
doppeltem Vor- und spanischem Nachnamen, die in der Freiherr von 
Münchhausen Strasse wohnen, treibst du zur Verzweiflung.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Und wo wir grad dabei sind: Trennung von Rechnungs- und Lieferanschrift 
nicht vergessen.

von g457 (Gast)


Lesenswert?

Hausnummern sollten keine Zahlen sein (oder ein extra Feld für einen 
Zusatz haben).

von Jim M. (turboj)


Lesenswert?

Stimmt, die Feldlängen sind wenigstens eine Größenordnung zu klein. 
Hausnummer kann Buchstaben enthalten (1367a).

von Nuckel (Gast)


Lesenswert?

Jim M. schrieb:
> Stimmt, die Feldlängen sind wenigstens eine Größenordnung zu klein.

Die Feldlängen müssen dynamisch sein.

von (prx) A. K. (prx)


Lesenswert?

Nuckel schrieb:
> Die Feldlängen müssen dynamisch sein.

Das sind sie hier ja auch. Nur eben mit viel zu kurzem Limit.

von Peter II (Gast)


Lesenswert?

auch an der Bezeichnung würde ich noch arbeiten.

Warum Kundennummer, woanders ist es immer ID... also würde auch hier 
IdKunde passen.

Warum Kunden_DAten, es sind doch die Kunden, also Kunden.

ArtikelSortiment würde ich auch als Artikel umbenennen.

Einzelartikel ist auch etwas ungünstig, da würde ich BestellungsPosition 
verwenden.

von (prx) A. K. (prx)


Lesenswert?

Peter II schrieb:
> auch an der Bezeichnung würde ich noch arbeiten.

Wenn man erst einmal anfängt, sich um Namen zu streiten, dann ist alles 
zu spät. ;-)

von Nuckel (Gast)


Lesenswert?

A. K. schrieb:
> Nuckel schrieb:
>> Die Feldlängen müssen dynamisch sein.
>
> Das sind sie hier ja auch. Nur eben mit viel zu kurzem Limit.

Präziser: die Feldlänge soll nur von den Ressourcen begrenzt werden.

von Huh (Gast)


Lesenswert?

A. K. schrieb:
> Peter II schrieb:
>> auch an der Bezeichnung würde ich noch arbeiten.
>
> Wenn man erst einmal anfängt, sich um Namen zu streiten, dann ist alles
> zu spät. ;-)

So sehe ich das auch. Dem TO ging es bestimmt in der Hauptsache um die 
Struktur der Datenbank...

von (prx) A. K. (prx)


Lesenswert?

Nuckel schrieb:
> Präziser: die Feldlänge soll nur von den Ressourcen begrenzt werden.

Um irgendwelchen Eseln die Chance zu geben, bereits mit dem Feld vom 
Vornamen die Kiste an den Anschlag zu bringen, auf dass sie beim 
Nachnamen abnippelt?

von Matthias Q. (zaphod_beeblebrox)


Lesenswert?

Ich bevorzuge es, in jeder Tabelle ein Auto Increment ID als PK zu haben 
und den eigentlichen Identifier mit Unique als eindeutig zu 
kennzeichnen. So hast du etwas mehr Flexibilität z.B. bei der Gestaltung 
der Kundennummer.

Ich würde die Bezeichner auch alle englisch machen. Macht sich später 
bei der Webanwendung einfacher, da deine Forms auch englische Namen 
haben sollte um die Autofill-Funkion der Browser besser zu nutzen.

VG
Matthias

: Bearbeitet durch User
von Peter II (Gast)


Lesenswert?

A. K. schrieb:
>> Präziser: die Feldlänge soll nur von den Ressourcen begrenzt werden.
>
> Um irgendwelchen Eseln die Chance zu geben, bereits mit dem Feld vom
> Vornamen die Kiste an den Anschlag zu bringen, auf dass sie beim
> Nachnamen abnippelt?

was will man mit einem 1000 Zeichen Ort anfangen, ihn kann man eh nicht 
auf das Paket drucken. Ich halte ein sinnvolle Obergrenze der varchar's 
auch für sinnvoll.

von g457 (Gast)


Lesenswert?

> was will man mit einem 1000 Zeichen Ort anfangen, ihn kann man eh nicht
> auf das Paket drucken.

Du hast Recht - ein Feld für Ort/Stadt sollte er auch noch hinzufügen 
:-)

von (prx) A. K. (prx)


Lesenswert?

Huh schrieb:
> So sehe ich das auch. Dem TO ging es bestimmt in der Hauptsache um die
> Struktur der Datenbank...

Anzunehmen. Und ich will hoffen, es ist eine Hausaufgabe, kein ernst 
gemeintes Projekt.

von Vlad T. (vlad_tepesch)


Lesenswert?

- Ein Feld für Adresszusätze wäre noch nett.
- PLZ sollte ein String sein. Man denke an Führende Nullen oder 
Bindestriche
- Zusätzlich zu PLZ sollte der Ort erfasst werden, es gibt Orte mit 
gleicher PLZ. Da diese entsprechend kleine Nester sind, neigen die auch 
dazu, jeweils eine eigene Dorfstraße zu haben.
- Der Einzelartikel/Bestellposten bräuchte auch noch nen Preis, der hier 
sitzen sollte, weil sich die Artikelauspreisung ja ändern kann oder 
abhängig von der Anzahl und der aktuellen Staffelung ist.

: Bearbeitet durch User
von T.roll (Gast)


Lesenswert?

Peter II schrieb:
> was will man mit einem 1000 Zeichen Ort anfangen, ihn kann man eh nicht
> auf das Paket drucken.

Ganz soviel brauchts nun nicht, aber:
* 58 Buchstaben: 
https://de.wikipedia.org/wiki/Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch
* 168 Zeichen: Krung Thep Maha Nakhon Amon Rattanakosin Mahinthara 
Yutthaya Mahadilok Phop Noppharat Ratchathani Burirom Udom Ratchaniwet 
Maha Sathan Amon Phiman Awatan Sathit Sakkathattiya Witsanukam Prasit 
(das ist der Name von Bangkok)

Matthias Q. schrieb:
> Macht sich später
> bei der Webanwendung einfacher, da deine Forms auch englische Namen
> haben sollte um die Autofill-Funkion der Browser besser zu nutzen.

So eine Funktion soll die Felder so ausfüllen wie ich das sage und nicht 
wie das Programm sich zusammenbastelt. Egal wie die Felder heißen.

von Matthias Q. (zaphod_beeblebrox)


Lesenswert?

T.roll schrieb:

> Matthias Q. schrieb:
>> Macht sich später
>> bei der Webanwendung einfacher, da deine Forms auch englische Namen
>> haben sollte um die Autofill-Funkion der Browser besser zu nutzen.
>
> So eine Funktion soll die Felder so ausfüllen wie ich das sage und nicht
> wie das Programm sich zusammenbastelt. Egal wie die Felder heißen.


Stimmt, es ist extrem komfortabel bei der Entwicklung englischen 
Quasistandard auf Eigenfrickelei zu mappen. Aber mach du...

von Purzel H. (hacky)


Lesenswert?

Es macht wenig Sinn Name und Vorname zu trennen. Ausser dann die Kunden 
sie vertauschen koennen.

Ich wuerd auch Strasse und Nummer nicht trennen. Recht haeufig duerften 
Hausnummern wie 3a zu sein. Bei uns haben Haeuser etwas ausserhalb 
einzelne Namen, also Strasse und Hausname

Es macht wenig Sinn PLZ und Ort zu trennen.
Eine Frage wie kleinraeumig das Ganze gedacht ist. Ich wuerd fuer PLZ 
und Ort zusammen 32 Zeichen vorsehen. Dann stehen die beiden schon in 
der richtigen Reihenfolge.

Aber mach mal. Etwas flexiblel sein. Es gibt noch viel zu lernen.

von Fast-H (Gast)


Lesenswert?

Zwölf M. schrieb:
> Es macht wenig Sinn Name und Vorname zu trennen. Ausser dann die Kunden
> sie vertauschen koennen.

Bei so manchem Namen weiß man nicht mal, was davon nun Vor- und was 
Nachname ist. Auch für Standard-Formulierungen in Anschreiben ist es 
nicht verkehrt, den Nachnamen sowie das Geschlecht zu kennen. Und für 
das Sortieren und Filtern ist es auch ziemlich unklug, diese 
Informationen zu verschmelzen.

> Ich wuerd auch Strasse und Nummer nicht trennen. Recht haeufig duerften
> Hausnummern wie 3a zu sein. Bei uns haben Haeuser etwas ausserhalb
> einzelne Namen, also Strasse und Hausname

Wenn man die Straßen separat erfasst, kann man mit einer vorgefertigten 
Straßen-Tabelle die Eingaben zuverlässiger autovervollständigen und 
läuft nicht Gefahr, dass 3 Kunden die gleiche Straße 3 x unterschiedlich 
in die DB reinhacken.

Zwölf M. schrieb:
> Es macht wenig Sinn PLZ und Ort zu trennen.
> Eine Frage wie kleinraeumig das Ganze gedacht ist. Ich wuerd fuer PLZ
> und Ort zusammen 32 Zeichen vorsehen. Dann stehen die beiden schon in
> der richtigen Reihenfolge.

Auch hier wieder die latente Gefahr von Tippfehlern, die man nicht 
unterschätzen sollte und die analog zu den Straßen bei einem WebShop 
wegen der Zustellung dann auch richtige Probleme verursachen können. Ich 
arbeite immer mit PLZ_Ort-Tabellen und ermittle den Ort anhand der 
eingegebenen PLZ.

Sinnvoll gewählte englische Namen würde ich eigentlich auch empfehlen, 
schon allein deshalb, weil man bei späteren Datenbank-Fragen auf z.B. 
Stackoverflow die vielen ausländischen Helfer nicht mit deutschen 
Tabellennamen verwirrt.

Abgesehen davon fehlt dem DB-Design leider noch viel zu viel, um damit 
tatsächlich einen ernstzunehmenden Shop zu betreiben. Und mit dem 
DB-Design alleine ist es ja nicht getan...bei diesen geringen Kentnissen 
tippe ich mal, dass frühestens in ca. 1 Jahr der Shop so weit ist, dass 
er einem der vernünftigen kostenlosen Shop-Systemen in einem früheren 
Beta-Stadium ähnelt. Und zum damaligen Zeitpunkt waren diese kostenlosen 
Shops ja noch meilenweit davon entfernt, fehlerfrei und zuverlässig zu 
arbeiten.

von D. I. (Gast)


Lesenswert?

Matze schrieb:
> Ich habe vor in nächster Zeit einen WebShop auf HTML,CSS,XML,PHP und
> MySQL basis zu erstellen.

Aus akademischem Lerntrieb? Es gibt bereits viele etablierte E-Commerce 
Lösungen, nimm eine davon, wenn du was verkaufen willst.

von Pandur S. (jetztnicht)


Lesenswert?

> Auch hier wieder die latente Gefahr von Tippfehlern, die man nicht
unterschätzen sollte und die analog zu den Straßen bei einem WebShop
wegen der Zustellung dann auch richtige Probleme verursachen können.

Hin und wieder entstehen neue Strassen. Dh diese Auswahltabelle muss 
immer aktuell sein. Woher nehm ich die ?
Das waer dann eine klare Beschraenkung auf das Inland. Wenn's um 
verderbliche Ware geht und man fern der Grenze ist ...

> Ich arbeite immer mit PLZ_Ort-Tabellen und ermittle den Ort anhand der
eingegebenen PLZ.

Auch hier eine klare Beschraenkung auf das Inland.

Zum Glueck ist die Zuordnung Dorf - PLZ in der besagten Richtung 
eindeutig. Ist sie das ? Eher nicht. Ich kann mich zB mit zwei 
verschiedenen Postleitzahlen beliefern lassen.

: Bearbeitet durch User
von Vlad T. (vlad_tepesch)


Lesenswert?

Oh D. schrieb:
> Zum Glueck ist die Zuordnung Dorf - PLZ in der besagten Richtung
> eindeutig. Ist sie das ? Eher nicht. Ich kann mich zB mit zwei
> verschiedenen Postleitzahlen beliefern lassen.

wie ich oben bereits erwähnte, ist es auch andersherum nicht eindeutig. 
Teilweise haben 2 naheliegende Dörfer die gleiche PLZ und beide haben 
die Obligatorische Dorfstraße mit gleichen Hausnummern

von Fast-H (Gast)


Lesenswert?

Oh D. schrieb:
> Hin und wieder entstehen neue Strassen. Dh diese Auswahltabelle muss
> immer aktuell sein. Woher nehm ich die ?

Derartige Ereignisse muss man nun wirklich nicht in Echtzeit 
synchronisieren...die bedingte Wahrscheinlichkeit, dass Neue Straße S + 
Person P wohnhaft in ebendieser Straße + Bestellung B in Deinem Shop 
auftritt, ist um Größenordnungen kleiner als die Wahrscheinlichkeit von 
Tippfehlern oder verschiedenen Schreibweisen durch die Kundschaft. Die 
nicht erkannte Straße kann man nach Bestätigung vom Kunden dann trotz 
fehlender Entsprechung diesem Kunden zuordnen.

Ich würde das mit der Aktualisierung dieser Tabellen auch nicht 
überbewerten...die allermeisten Straßen werden bei den von mir 
programmierten Datenbanken auch nach Jahren noch von veralteten Tabellen 
abgefangen und genau darum geht es hier.

Oh D. schrieb:
> Auch hier eine klare Beschraenkung auf das Inland.

Nein. Ich muss bei internationalen Shops sowieso das Zielland abfragen 
und kann dann diese Beschränkung dynamisch deaktivieren oder mir 
entsprechende Tabellen/Algorithmen für das Zielland organisieren.

Oh D. schrieb:
> Zum Glueck ist die Zuordnung Dorf - PLZ in der besagten Richtung
> eindeutig. Ist sie das ? Eher nicht. Ich kann mich zB mit zwei
> verschiedenen Postleitzahlen beliefern lassen.

Und wo ist das Problem? Wenn es offiziell wirklich 2 oder mehr 
verschiedene PLZ für einen Ortsteil gibt, dann ist das in der Tabelle 
berücksichtigt und ich kann es mir aussuchen, unter welcher PLZ ich 
beliefert werden möchte, denn sonst wäre die PLZ-Zuodnung ja unabhängig 
von der Datenbank falsch.

Vlad T. schrieb:
> wie ich oben bereits erwähnte, ist es auch andersherum nicht eindeutig.
> Teilweise haben 2 naheliegende Dörfer die gleiche PLZ und beide haben
> die Obligatorische Dorfstraße mit gleichen Hausnummern

Wenn es nicht eindeutig wäre, könnte kein Postbote die Sendungen 
zustellen. Es muss also irgendwelche Zusätze geben, die ich analog zu 
den anderen Orten in die Datenbank einpflegen kann(Musterort-Musterdorf1 
versus Musterort-Musterdorf2). Es gibt kein Gesetz, dass es mir 
verbietet, in der Tabelle hinter 2 gleichen Orten noch Dorf-Zusätze zu 
ergänzen, so dass die Kunden aus diesen Dörfern den für sie richtigen 
Eintrag wählen können. Alternativ könnte man auch hier die vom Kunden 
eingegebene Information nach Rückfrage ungeprüft übernehmen, so lange 
man sich damit nicht die Autovervollständigen-Tabelle verschmutzt.

von Vlad T. (vlad_tepesch)


Lesenswert?

Fast-H schrieb:
> Wenn es nicht eindeutig wäre, könnte kein Postbote die Sendungen
> zustellen. Es muss also irgendwelche Zusätze geben, die ich analog zu
> den anderen Orten in die Datenbank einpflegen kann(Musterort-Musterdorf1
> versus Musterort-Musterdorf2). Es gibt kein Gesetz, dass es mir
> verbietet, in der Tabelle hinter 2 gleichen Orten noch Dorf-Zusätze zu
> ergänzen, so dass die Kunden aus diesen Dörfern den für sie richtigen
> Eintrag wählen können. Alternativ könnte man auch hier die vom Kunden
> eingegebene Information nach Rückfrage ungeprüft übernehmen, so lange
> man sich damit nicht die Autovervollständigen-Tabelle verschmutzt.

es ging ja darum, den Ort wegzulassen und aus der PLZ zu gewinnen.
Kombination aus Ort+PLZ sollte eindeutig sein.

von JJ (Gast)


Lesenswert?

Du solltest dein Sortiment von den Bestellungen trennen. Ansonsten 
kannst du Artikel nicht mehr verändern, nachdem sie zum ersten Mal 
bestellt wurden.

von Klaus P. (Gast)


Lesenswert?

Matze schrieb:
> Die DB ist wohl in 3. Normalform.
> Was haltet ihr davon?
> Ist sie korrekt?

Du hast nicht beachtet, dass Kunden die Angewohnheit haben, umzuziehen, 
zu heiraten oder anderweitig den Namen zu ändern.

Das gleiche trifft vermutlich auf die Artikel zu (Preisänderung, 
Änderung der Bezeichnung etc.).

Die ursprüngliche Bestellung sollte zu Prüfzwecken (z.B. für 
Steuerprüfungen) auf jeden Fall nachvollziehbar sein. D.h. Du musst die 
Kundendaten in die Bestellung kopieren. Das kann man in Tabellenform 
machen, man kann aber auch XML oder JSON Felder dafür benutzen.

D.h. diese Daten eignen sich nicht für eine Normalisierung wie in Deinem 
Schema dargestellt.

Wenn es keine Programmierübung sein soll, würde ich auch eher zu einem 
fertigen Shop greifen. Die Einarbeitung in Layout und Logik mag etwas 
länger dauern, aber dafür sind solche Randbedigungen dabei in der Regel 
berücksichtigt.

von D. I. (Gast)


Lesenswert?

Klaus P. schrieb:
> Die ursprüngliche Bestellung sollte zu Prüfzwecken (z.B. für
> Steuerprüfungen) auf jeden Fall nachvollziehbar sein. D.h. Du musst die
> Kundendaten in die Bestellung kopieren. Das kann man in Tabellenform
> machen, man kann aber auch XML oder JSON Felder dafür benutzen.

Das kann man garnicht stark genug betonen, alles archivrelevante 
entsprechend zu behandeln und abzulegen. Ein guter Anhaltspunkt ist sich 
zu überlegen, was alles auf der Rechnung erscheint und über die Zeit 
auch immer wieder so auf der Rechnung erscheinen sollte würde man sie 
neu generieren.
Ansonsten VARCHAR(1) fürs Geschlecht wird heutzutage schon sportlich.

von Mark B. (markbrandis)


Lesenswert?

D. I. schrieb:
> Matze schrieb:
>> Ich habe vor in nächster Zeit einen WebShop auf HTML,CSS,XML,PHP und
>> MySQL basis zu erstellen.
>
> Aus akademischem Lerntrieb? Es gibt bereits viele etablierte E-Commerce
> Lösungen, nimm eine davon, wenn du was verkaufen willst.

So sieht's aus. Man erfindet das Rad nicht neu wenn man nicht muss. 
Zumindest dann nicht, wenn es schöne und gut funktionierende Räder zu 
einem vernünftigen Preis zu kaufen gibt.

von D. I. (Gast)


Lesenswert?

Mark B. schrieb:
> D. I. schrieb:
>> Matze schrieb:
>>> Ich habe vor in nächster Zeit einen WebShop auf HTML,CSS,XML,PHP und
>>> MySQL basis zu erstellen.
>>
>> Aus akademischem Lerntrieb? Es gibt bereits viele etablierte E-Commerce
>> Lösungen, nimm eine davon, wenn du was verkaufen willst.
>
> So sieht's aus. Man erfindet das Rad nicht neu wenn man nicht muss.
> Zumindest dann nicht, wenn es schöne und gut funktionierende Räder zu
> einem vernünftigen Preis zu kaufen gibt.

Nicht umsonst gibts gefühlt 1000 Webbutzen, die sich auf "E-Commerce" 
"spezialisiert" haben...

von Jörg M. (derlang)


Lesenswert?

Zwölf M. schrieb:
> Es macht wenig Sinn Name und Vorname zu trennen. Ausser dann die Kunden
> sie vertauschen koennen.
>
> Ich wuerd auch Strasse und Nummer nicht trennen. Recht haeufig duerften
> Hausnummern wie 3a zu sein. Bei uns haben Haeuser etwas ausserhalb
> einzelne Namen, also Strasse und Hausname
>
> Es macht wenig Sinn PLZ und Ort zu trennen.
> Eine Frage wie kleinraeumig das Ganze gedacht ist. Ich wuerd fuer PLZ
> und Ort zusammen 32 Zeichen vorsehen. Dann stehen die beiden schon in
> der richtigen Reihenfolge.
>
> Aber mach mal. Etwas flexiblel sein. Es gibt noch viel zu lernen.

Sorry,

aber das würde ich auf gar keinen Fall empfehlen!

Bin gespannt wie du mit Multi-Information-Attributen Plausi-Checks 
durchführen möchtest. Neben vielen anderen Aspekten der guten 
Entwicklungsparaxis...

von Jörg M. (derlang)


Lesenswert?

Klaus P. schrieb:
>
> Die ursprüngliche Bestellung sollte zu Prüfzwecken (z.B. für
> Steuerprüfungen) auf jeden Fall nachvollziehbar sein. D.h. Du musst die
> Kundendaten in die Bestellung kopieren. Das kann man in Tabellenform
> machen, man kann aber auch XML oder JSON Felder dafür benutzen.

Oder man verwendet ein Audit-Trail auf Tabellenebene

: Bearbeitet durch User
von Klaus P. (Gast)


Lesenswert?

Jörg M. schrieb:
> Oder man verwendet ein Audit-Trail auf Tabellenebene

Das kann man machen, will man in der Regel aber nicht. Wenn 
derjenige, der die Bestellung anlegt, sie dreimal ändert, weil er sich 
vertippt hat, werden auch ebensoviele Einträge in den Audittabellen 
angelegt. Oder die Audit-Trigger werden kompliziert (und ggf. sehr 
langsam).

Audits auf Tabellenebene sollten aber einfach gehalten werden und am 
besten auch keine Aufgaben der Anwendungslogik übernehmen. Das könnte 
über kurz oder lang niemand mehr warten.

von Amateur (Gast)


Lesenswert?

Ich finde, man soll explizit die Eingabe von der Verarbeitung trennen.
Sowohl bei der Angabe neuer Artikel, als auch bei einem Kunden, kann es 
zu Fehlern kommen.
Somit sollten solche Eingaben alle, mit dem guten, alten OK-Button, 
abgeschlossen werden.
Sehr viele Gedanken sollte man sich auch zum Thema "ändern" machen.
Man erzeugt zwar viele Tabellen, aber es ist keine gute Idee zu viele 
Angaben in einem Eintrag zu verpacken.
Wird z.B. die Stadt mit der Straße verbunden, so ist der Eintrag für 
nichts anderes mehr zu gebrauchen.

Der beste Eintrag ist AutoInc oder wie auch immer das Teil benannt wird. 
Dieser Eintrag sollte zu JEDEM Datensatz für eine eventuelle Referenz 
verwendet werden. Auch DU solltest hierauf keinen Zugriff haben. Sollte 
sich am Ende keiner für eine bestimmte Referenz interessieren - was 
soll's. Sind Deine Löschfunktionen zu Fehlerhaft, musst Du halt eine 
Reinigungsfunktion schreiben.

Ein paar Tipps:
Außerhalb von Ober-Unter-Hinter kann eine Ortschaft mehr als eine 
Postleitzahl haben. Also ist die Fixierung der Postleitzahl mit einem 
Ort zulässig, einen Ort mit einer Postleitzahl zu fixieren ist 
fehlerträchtig.

Schränke die erlaubten Eingaben nicht zu sehr ein. Insbesondere in 
Reihenhaussiedlungen sind Hausnummer wie 22f keine Seltenheit. Meine 
Hausnummer lautet 35/1/4. Es gibt sogar noch einige Ortschaften, die 
keine Straßennamen verwenden sondern nur Hausnummern.

Sehr große Firmen bzw. Institutionen haben nur eine Postleitzahl und gar 
keine Adresse.

Wir haben mal einen Brief, als unzustellbar, zurückbekommen, bei dem der 
dritte Dr., des Ansprechpartners,  fehlte. Ganz wichtig bei Lieferungen 
nach Österreich. Letztere verwenden im Übrigen 4-stellige 
Postleitzahlen...

Ein Feld für eine (2-3) Länderkennung kann auch nicht schaden. 
Spätestens bei Lieferungen ins deutschsprachige Ausland, kann es bei 
Städtenamen zu Doppeldeutigkeiten kommen und nicht nur ins Ausland. 
Neustadt in Deutschland ist kein Städtename, sondern ein Sammelbegriff. 
Meist durch Zusätze entschärft.
Also:
Neustadt
Neustadt a.R.
Neustadt a. R.
Neustadt a R
Neustadt a. Rübenberge
Neustadt am Rübenberge
u.s.w. können, müssen aber nicht, für ein und dieselbe Stadt stehen.

Karl Niemand Straße
Karl Niemand-Straße
Karl Niemand Strasse
Karl Niemandstrasse
usw. sind ebenfalls möglich.

Hinzu kommen noch die vielen Schreib- und Lesefehler.

von D. I. (Gast)


Lesenswert?

Amateur schrieb:
> Meine
> Hausnummer lautet 35/1/4.

Musstest du zur Schule dann immer den Zug am Gleis 9 3/4 nehmen? :)

von Dieter F. (Gast)


Lesenswert?


von Andy (Gast)


Lesenswert?

Vlad T. schrieb:
> es ging ja darum, den Ort wegzulassen und aus der PLZ zu gewinnen.
> Kombination aus Ort+PLZ sollte eindeutig sein.

Also lediglich aus PLZ + Straße eine eineindeutige Adresse zu erstellen 
funktioniert nicht und ist auch so nicht vorgesehen. Programmierer, die 
das nicht beachten, kannste wegen grundsätzlicher Inkompetenz in Regreß 
nehmen (RTFM nicht beachtet).
Beispiel: Ich wohne in einem Ort A mit PLZ 1 die auch für Ort B und 
sogar Ort C gilt. In allen drei Orten gibts die "Hauptstraße". Die 
Postboten wissen, daß sie auf den Ort achten müssen, aber hier stand 
schonmal ein Vollzugsbeamter und wollte mich als Zeuge zum Gericht 
schleifen, weil derjenige, um den es ging die Vorladung nicht erhielt 
(Einwurfeinschreiben des Gerichts, jedoch einer dieser neumodischen 
Regionalbriefdienste) und nun zwangsvorgeführt werden sollte.
Ich konnte anhand Ausweis wenigstens den Beamten von seinem 
Fehler("Falscher Ort", damit falsche Person) überzeugen. Wie es ausging, 
weiß ich leider nicht.

oT: Vergiß nicht, in der Bestellung ggf Zahlart + Versandart, Bemerkung 
und wenigstens ein Flag "offene bestellung"/ "Bestellung abgeschlossen" 
zu hinterlegen.
Kundenadressen möglichst Neutral anlegen: was wenn statt 
[Vorname=]"Erwin" + [Nachname=]"Mustermann" auf einmal 
[vorname=]"Autohandel GmbH" + [Nachname=]"Egon Boss" bestellt?
Ergo: "Name1"-"Name3" ist ideal (vergiß nicht, daß du bei Lieferadresse= 
"Packstation" drei Zeilen brauchst).
Klar ist Ort Varchar(100?) + PLZ = Varchar10 + IsoLand= varchar3 (jaja 
Üblich ist alpha-2 mit nur 2 Buchstaben, aber schonmal erlebt, wenn ein 
Spanier "ES" in ein Iso 3166-alpha-3-Feld eintippt? :D Prüf es trotzdem 
nach oder mach besser ein SELECT-Tag ins HTML-Formular.
wenn es wirklich Auslandskunden gibt, mach dich auf das britische 
Postsystem gefasst. Oder noch schlimmer: Hongkong = keine PLZen.

Auch noch wichtig: in der Liste der bestellten Artikel sollte neben 
Anzahl auch mindestens der aktuelle Einzelpreis rein.
Es macht übrigens (außer vllt. auf Raspberry Pi) bei Mysql nichts aus, 
wenn du die varchar-Größenwerte großzügig angibst. Das bisschen 
Performance und Speicherunterschied geht völlig im Rauschen unter:jede 
neue Indextabelle würfelt Performance und Speicherplatz weit mehr 
durcheinander. Zumindest gilt das für obigen Zweck, in anderen Fällen 
mags vllt. anders aussehen.

Was du tunlichst sein lassen solltest: Umlaute in Mysql-Spalten- oder 
gar Tabellennamen. Obwohl das einleuchtend ist, gibts da draußen noch 
immer Webbuden, die das nicht kapieren.

von Tommi (Gast)


Lesenswert?

Ihr betrachtet das hier nur aus der Perspektive des Programmierers. Als 
Kunde will ich aber nicht 100 Felder ausfuellen muessen, selbst wenn 
sich die Anzahl an Eingabezeichen nicht aendert. Ich will auch nicht aus 
womoeglichen Teilorten auswaehlen muessen. Und wenn die Hausnummer in 
ein extra Feld eingegeben werden muss, komm ich mir schon verarscht vor. 
Spaetestens dann ueberleg ich mir, ob ich den Artikel wirklich so 
dringend brauch.

Deshalb:
-Vorname
-Name
-Adresszusatz
-Strasse/Hausnr.
-PLZ/Ort

Also nicht alles technisch optimieren, sondern auch auf die 
Nutzerfreundlichkeit achten!

Negativbeispiel: Auf einer deutschsprachigen Seite muss das Land aus 
einer Liste mit 400 Eintraegen ausgewaehlt werden, Deutschland ist zu 
finden unter F wie Federal Republic of Germany :-)

von Sheeva P. (sheevaplug)


Lesenswert?

Peter II schrieb:
> was will man mit einem 1000 Zeichen Ort anfangen, ihn kann man eh nicht
> auf das Paket drucken. Ich halte ein sinnvolle Obergrenze der varchar's
> auch für sinnvoll.

Ja, aber nicht in MySQL, wenn sie das nicht geändert haben. Früher war 
es jedenfalls so, daß man "Peter II" problemlos in ein VARCHAR(3) 
schreiben konnte, das dann ohne Fehlermeldung abgeschnitten wurde und 
man beim Lesen nurmehr "Pet" heraus bekam. Einer der vielen Gründe, 
warum ich MySQL bei keinem ernsthaften Projekt mehr benutzen würde und 
stattdessen zu Postgres gewechselt bin.

von Sheeva P. (sheevaplug)


Lesenswert?

Matze schrieb:
> Ich habe vor in nächster Zeit einen WebShop auf HTML,CSS,XML,PHP und
> MySQL basis zu erstellen.

Wozu XML?

> Dabei soll es möglich sein Kunden anzulegen, welche Bestellungen
> aufgaben können. Diese Bestellungen bestehen aus einer vielzahl von
> Artikeln.
> Da ein Artikel jedoch auch in vielen Bestellungen vorkommt, habe ich
> dies durch die Tabelle "Einzelartikel" zu einer 1 zu n Beziehung
> umgeformt.
>
> Die DB ist wohl in 3. Normalform.
> Was haltet ihr davon?
> Ist sie korrekt?

Nein. Deine bestehenden Bestellungen gehen kaputt, sobald sich der Preis 
für einen Artikel nachträglich ändert -- viel Spaß mit Deinem Finanzamt. 
Leute, die im Ausland wohnen und deren PLZ daher nicht in ein INT 
passen, können bei Dir ebensowenig bestellen wie jene, die hier in 
Aachen in der Straße "Henger Herrjotts Fott" mit der Hausnummer "37a" 
wohnen.

Bei einem Shop gibt es mehrere Entitäten, von denen keine in nur einer 
Tabelle abgebildet werden kann: Kunde, Sortiment, Lager und Bestellung.

Schon einen Kunden würde ich mit mehreren Tabellen anlegen: Stammdaten, 
Wohn-, Rechnungs- und Lieferadressen, Kontaktdaten wie E-Mail-Adressen, 
Telefon- und Telefaxnummern, Bankverbindung, jeweils gerne auch mehrere. 
Da komme ich allein um einen Kunden sauber abzubilden auf mindestens 
vier Tabellen, hinzu kommen eventuell Rabattierungen, Gutscheine etc.

Dann ist da das Sortiment; nur die einfachsten Artikel können in nur 
einer Tabelle abgebildet werden. Schon Schuhe haben unterschiedliche 
Größen und können unterschiedliche Farben für Sohle, Deckmaterial, und 
Schnürsenkel haben, und dann, je nachdem, auch noch unterschiedliche 
Preise.

Außerdem willst Du sicher keine Produkte anbieten, die Du nicht liefern 
kannst; Du mußt also nachhalten, wieviele Produkte eines bestimmten Typs 
Du noch auf Lager oder bereits verkauft hast. Idealerweise wird Dein 
Shop Dich Dein Shop daran erinnern, daß Du nachbestellst, sobald eine 
bestimmte Mindestmenge unterschritten wird, oder daß Du Sonderangebote 
machst, wenn Du mehr als eine bestimmte Höchstmenge an Produkten im 
Lager hast.

Und dann kommen die Bestellungen. Die dürfen sich natürlich nicht 
ändern, nur weil ein Produktpreis oder eine Kundenanschrift geändert 
worden ist, und gehören deswegen in mindestens zwei eigene Tabellen, die 
NICHT mehr direkt an den Produkt- und Kundentabellen hängen dürfen.

von Pandur S. (jetztnicht)


Lesenswert?

Ein paar Erfahrungen.

Die Laenderauswahlliste kommt schlecht an. Falls man so eine denn 
wollte, sollte man die nahen Laender zuoberst haben. Sollte aber auch so 
ersichtlich sein. Ich muss jeweils immer runterscrollen bis Uzbekistan, 
United States, Swaziland oder so. Wobei mein Land in einer englischen 
Liste und einer Deutschen etwa am selben Ort zu finden sind. Also ich 
find die Listen Schrott.

Andererseits. Wenn man das Land ausfuellbar macht erhaelt man :

Germany resp GERMANY
Deutschland resp DEUTSCHLAND

Schweiz resp SCHWEIZ
Suisse resp SUISSE
Switzerland resp SWITZERLAND

England
Britain
Scottland
Great Britain
GB

The Netherlands
Netherlands
Niederland

US
United States
USA
United States of America

Also gross/klein, mehrsprachige Auslegungen, Abkuerzungen, alles Fehler 
nicht eingerechnet.
Wenn man das alles in die Datenbank eintraegt, ist die Adresse 
moeglicherweise postalisch gueltig, man findet aber nichts.

Die Namen sind aehnhlich schlimm. Mit dem Nachteil, dass es da keine 
Auswahllisten gibt. Moegliche Eintraege derselben Person, resp Familie

Karl Hinterwald
Hr K Hinterwald
KARL HINTERWALD
Hinterwald Karl
Dr Karl Hinterwald
K & G Hinterwald-Vordemwald = Maennername-Frauenname
Karl & Gertrud Hinterwald

und Permutationen. Zwei getrennte Felder fuer Name & Vorname haelt die 
Leute nicht davon ab, verkehrt einzufuellen.

Adresszusaetze :

Supercampus of Hainan University, Hainan, China, Division Supertech, 
Superlab 2134, Floor 123, ..
Hainan University, Hainan, China
Hainan, China

Da war dann nichts mit 80 Zeichen fuer irgendwas. Wenn man nichts senden 
muss, am besten ein Textfeld fuer alles, 4000 Character, und egal, auf 
der Rechnung steht was eingefuellt wurde.

Eine Begrenzung muss aber sein, denn hin und wieder bekommt man 
roboterisierte Adressen, die sich dann hinziehen koennen.

Man kann sich da vertun, und sollte immer bereit sein etwas 
dazuzulernen. Ein Standard Library Baustein genuegt nicht.

: Bearbeitet durch User
von Jay (Gast)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.