Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Frage zum DB-Design (https://www.delphipraxis.net/126110-frage-zum-db-design.html)

khh 18. Dez 2008 09:56

Datenbank: firebird • Version: 2.1 • Zugriff über: zeos

Frage zum DB-Design
 
hallo zusammen,
ich hab mal ne Frage zum DB-Design.

Würdet Ihr Anrede und Titel im Kundendatensatz als String speichern oder eher in separaten tabellen.

Ich denke der Aufwand von separaten Tabellen lohnt nicht .


Gruss KH

DeddyH 18. Dez 2008 09:59

Re: Frage zum DB-Design
 
Ich denke, der lohnt schon. Stell Dir vor, Du suchst alle Herren. Nun hast Du aber bei der Eingabe nicht aufgepasst und einmal "Her" geschrieben. Somit wird Dir ein Datensatz unterschlagen. Gerade für solche Dinge wurde ja die Normalisierung eingeführt. Bei einer ordentlichen Relation wären dann eben alle "Herren" auch "Heren", Du würdest den Fehler schneller bemerken und müsstest nur einen einzigen Datensatz ändern.

khh 18. Dez 2008 10:01

Re: Frage zum DB-Design
 
Zitat:

Zitat von DeddyH
Ich denke, der lohnt schon. Stell Dir vor, Du suchst alle Herren. Nun hast Du aber bei der Eingabe nicht aufgepasst und einmal "Her" geschrieben. Somit wird Dir ein Datensatz unterschlagen. Gerade für solche Dinge wurde ja die Normalisierung eingeführt. Bei einer ordentlichen Relation wären dann eben alle "Herren" auch "Heren", Du würdest den Fehler schneller bemerken und müsstest nur einen einzigen Datensatz ändern.

unter diesem Aspekt gebe ich dir Recht.
Dann aber auch auf jeden Fall eine FK setzen.

DeddyH 18. Dez 2008 10:05

Re: Frage zum DB-Design
 
Ja natürlich.

Hansa 18. Dez 2008 10:59

Re: Frage zum DB-Design
 
Ich wäre da etwas vorsichtiger mit extra Tabelle. Pauschal kann man das jedenfalls nicht empfehlen. Die Anwender sind äußerst erfindungsreich, wenn es darum geht, Informationen, die eigentlich so nicht vorgesehen sind, dennoch aus irgendwelchen Gründen in einem Datensatz zu hinterlegen. Beispiele die mit extra Tabelle zumindest "komisch" aussehen :

Delphi-Quellcode:
Herr
Feuerwehr
Poststr. 34
12345 X-Dorf
Delphi-Quellcode:
Praxisgemeinschaft
Dr. Krank
Poststr. 34
12345 X-Dorf
Delphi-Quellcode:
Prof.
Dr. Dr. Schlau
Poststr. 34
12345 Berlin
Hier noch ein paar klassische Fälle :

Delphi-Quellcode:
Fa. Metallbau
z.Hd. Herrn Zitzelsberger oder Frau Wolf
Poststr. 34
12345 Berlin
Delphi-Quellcode:
Fa. Metallbau (Abteilung Einkauf Tor 37)
z.Hd. Frau Dr. Hintze-Schnarrenberger
Poststr. 34
20000 Hamburg
Nehmen wir mal den letzten Fall : als Anrede wäre wohl nur "Fa." möglich und fest vorgegeben. Wo soll man nun den Rest speichern ? Die Felder dürfen auch eine maximale Länge nicht überschreiten (Fensterkuvert, Etiketten etc.). Ich verzichte jedenfalls zugunsten der Flexibilität auf extra-Tabelle. Der User hat 4 Zeilen und fertig.

Nersgatt 18. Dez 2008 11:03

Re: Frage zum DB-Design
 
Das Feld AnredeID sollte halt NULL-Werte zulassen. "Praxisgemeinschaft" sehe ich z.B. nicht als Anrede, sondern als Namensbestandteil an. Daher gehört das ins Namensfeld.

Gruß,
Jens

DeddyH 18. Dez 2008 11:04

Re: Frage zum DB-Design
 
Und Prof. ist keine Anrede, sondern ein Titel ;)

Hansa 18. Dez 2008 11:28

Re: Frage zum DB-Design
 
Wie gesagt, pauschal sagen, was besser ist, das kann man nicht sagen. Kommt eben drauf an. Der eine "Her", der würde schon irgendwann auffallen und man müsste/sollte die eine Adresse dann korrigieren. Der Schreibfehler könnte zwar redundant sein und man bräuchte nur die Anrede-Tabelle zu aktualisieren. Aber wehe, in dieser hat sich ein "Her" eingeschlichen. Sind die 1000 Rechnungen gedruckt, dann fällts einem zwar auf, aber alles muss/soll neu gedruckt werden. Murphy lässt grüßen. :mrgreen:

Beim Prof. weiß ich es nicht genau. Aber der Dr. ist zwar ein Titel und trotzdem sogar Namensbestandteil. Lasse dir mal von einem mit gekauftem Dr.-Titel den Ausweis zeigen. Wetten, dass der "Dr." da als Name mit drin steht ? :shock: Ich hatte allerdings auch mal einen Sonderfall, da war es unumgänglich, die Anrede-Felder separat zu halten. Dabei ging es aber um 500.000 Adressen. 100.000 Adressen waren Firmen und genau die sollten NICHT angeschrieben werden. Macht ohne Massen-Rabatt eine Ersparnis von 100.000x0,55 EUR = 55.000 EUR ! Bei allen anderen Fällen ist meistens die Flexibilität wichtiger.

mkinzler 18. Dez 2008 11:56

Re: Frage zum DB-Design
 
Dr, Prof usw sind Akademische Titel, diese sind genauso wie Adeltstitel und Berufstitel ( Rechtsanwalt, Steuerberater, Wirtschaftsprüfer, ...) im Ausweis ausgewiesen, sind aber nicht Teil des Namens.
Man kann ja zu Dokumentationszwecken die ausgewählten Werte ( oder das ganze Adressfeld) redundant ablegen

Assertor 18. Dez 2008 12:05

Re: Frage zum DB-Design
 
Hi,

Zitat:

Zitat von mkinzler
Ddiese sind genauso wie Adeltstitel und Berufstitel ( Rechtsanwalt, Steuerberater, Wirtschaftsprüfer, ...) im Ausweis ausgewiesen

Du lebst aber nicht in Deutschland, oder? Adelstitel gehören schon seit Ende des 1. Weltkrieges der Vergangenheit an (sind eben doch Familiennamensbestandteil) und Berufstitel gibt es im Ausweis auch nicht. Das wär ja was...

Edit: Bei Dir steht doch Heilbronn im Profil, also das wundert mich. Das sich dieser Irrglaube mit den Adelstiteln noch immer hält, fast 100 Jahre danach. Denk mal an die US Buddies die vom "adoptierten Adel" wiederum adoptiert wurden. Das sind nur Namen, die durch die Adoption angenommen werden. Mehr nicht.

Gruß Assertor

khh 18. Dez 2008 12:13

Re: Frage zum DB-Design
 
Zitat:

Zitat von Hansa
Der Schreibfehler könnte zwar redundant sein und man bräuchte nur die Anrede-Tabelle zu aktualisieren. Aber wehe, in dieser hat sich ein "Her" eingeschlichen.

wobei es dann evtl. Sinn machen würde die Anredetabelle bei der Kundenanlage nicht zu beschreiben, sondern nur eine vorgegebene Auswahl zuzulassen und die Anreden separat zu pflegen.

Was spricht dagegen?


Gruss Kh

mkinzler 18. Dez 2008 12:26

Re: Frage zum DB-Design
 
Zitat:

Bei Dir steht doch Heilbronn im Profil, also das wundert mich. Das sich dieser Irrglaube mit den Adelstiteln noch immer hält,
Hier in der Provinz ticken die Uhren halt anders.
Zitat:

sondern nur eine vorgegebene Auswahl zuzulassen und die Anreden separat zu pflegen.

Was spricht dagegen?
Ich würde auf jeden Fall nichts automatisch übernehmen

Nersgatt 18. Dez 2008 12:29

Re: Frage zum DB-Design
 
Zitat:

Zitat von khh
Zitat:

Zitat von Hansa
Der Schreibfehler könnte zwar redundant sein und man bräuchte nur die Anrede-Tabelle zu aktualisieren. Aber wehe, in dieser hat sich ein "Her" eingeschlichen.

wobei es dann evtl. Sinn machen würde die Anredetabelle bei der Kundenanlage nicht zu beschreiben, sondern nur eine vorgegebene Auswahl zuzulassen und die Anreden separat zu pflegen.

Was spricht dagegen?

Die User ;-)
Ich kenne Firmen, da würden die User heulen "Alles viel zu kompliziert! So brauche ich ja 20 Minuten um einen Kunden einzugeben! Die Software ist Scheiße!".
Ich kenne wiederrum Firmen, die sagen dass nur bestimmte Leute Stammdaten wie z.B. Anreden pflegen dürfen. Die Leute, die die Kunden erfassen dürfen nur aus der Auswahl wählen. Wenn eine Anrede fehlt, müssen sie zum Chef gehen und besprechen, ob man evtl. eine neue Anrede einpflegt.
Dann kenne ich auch noch Firmen, die sind zufrieden, wenn man neben der Anredenauswahl im Kundensatz einen Button macht, mit dem man mit einem Klick in den Anredenstammdaten springen kann und evtl. fehlende Anreden nachpflegen kann.

Die Antwort ist also: Kommt drauf an.

Gruß,
Jens

Hansa 18. Dez 2008 12:31

Re: Frage zum DB-Design
 
Zitat:

Zitat von khh
..sondern nur eine vorgegebene Auswahl zuzulassen und die Anreden separat zu pflegen..

Das ist doch genau das, um was es geht. Du lässt nur Frau, Herr, Frl., Herr Dr., Frau Dr., Herr u. Frau, Herr u. Frau Dr., Fa., Praxis, Dr. med... Dr. XY etc. Prof., Prof. h.c., WG, Büro und weiß der Kuckuck was noch, zu in extra Tabelle. Diese muss separat gepflegt werden. Also Eingabe/Ändern/Ausgabe/Löschen. Jetzt gehts auf DB-Seite richtig los. Das muss wenn schon, dann kaskadierend gemacht werden mit FK etc. Heißt : sofern eine Anrede gelöscht wird, müssen alle betroffenen Adressen aktualisiert werden. Beim Löschen auf NULL oder Vorgabewert setzen. Vorteil ist : eine Anrede ändern => alle betroffenen Datensätze sind auf einen Schlag auf neuem Stand. Nachteil : geringere Flexibilität für die User. Und letztere ist zumindest mir wichtiger, als der ansonsten noch zu betreibende Verwaltungsaufwand. Ausnahmen bestätigen dabei die Regel ! Siehe meine Adressen. 8) Was in deinem konkreten Fall besser ist, das musst du selber wissen.

khh 18. Dez 2008 12:41

Re: Frage zum DB-Design
 
Zitat:

Zitat von Hansa
Was in deinem konkreten Fall besser ist, das musst du selber wissen.


ich danke euch für eure Meinungen.

khh 18. Dez 2008 12:44

Re: Frage zum DB-Design
 
Zitat:

Zitat von Hansa
Aber wehe, in dieser hat sich ein "Her" eingeschlichen. Sind die 1000 Rechnungen gedruckt, dann fällts einem zwar auf, aber alles muss/soll neu gedruckt werden. Murphy lässt grüßen. :mrgreen:


was dafür spricht, die Anreden und andere Stammdaten nur von bestimmten Leuten pflegen zu lassen.


Gruss KH

fragile 18. Dez 2008 14:15

Re: Frage zum DB-Design
 
Zitat:

Ich denke der Aufwand von separaten Tabellen lohnt nicht .
IMHO auf jeden Fall mit extra Tabellen für Anrede und Titel arbeiten!
Außerdem ein zweites Feld "Namenszusatz" oder ähnlich neben Vor/Nachname/Firmenname einfügen.

Da wir international arbeiten, habe ich mittlerweile etwa 30 Einträge in meiner "Anrede" - Tabelle und etwa 20 Einträge in meiner "Titel" Tabelle.
Das gleiche für das Feld "Sprache". Ändern dürfen das nur unsere Fremdsprachensekretärin, ein Admin oder ich...

fragile 18. Dez 2008 14:20

Re: Frage zum DB-Design
 
Zitat:

Jetzt gehts auf DB-Seite richtig los.
Sry aber sogar für mich als DB-Anfänger war das ein eher einfacher Task...

khh 18. Dez 2008 15:54

Re: Frage zum DB-Design
 
Zitat:

Zitat von fragile
Zitat:

Jetzt gehts auf DB-Seite richtig los.
Sry aber sogar für mich als DB-Anfänger war das ein eher einfacher Task...

was verstehst du unter einem einfachen task?

mkinzler 18. Dez 2008 15:56

Re: Frage zum DB-Design
 
Es handelt sich ja "nur" um Normalisierung.Abfragen können da schon komplexer sein

khh 18. Dez 2008 15:59

Re: Frage zum DB-Design
 
Zitat:

Zitat von mkinzler
Es handelt sich ja "nur" um Normalisierung.Abfragen können da schon komplexer sein

wobei sich mir dann die Frage stellt ob immer bis zur 3ten Normalform ( oder noch weiter? ) normalisiert nwerden soll, oder ob in bestimmten Fällen Redundanz in Kauf genommen werden soll.

Siehe Anreden ;-)

mkinzler 18. Dez 2008 16:02

Re: Frage zum DB-Design
 
Wie gesagt ist eine Anrede ein klarer Fall für die Normalisierung, während Orte normalerweise nicht normalsiert werden, obwohl sie eigentlich von der PLZ abhängig sind.

khh 18. Dez 2008 16:04

Re: Frage zum DB-Design
 
Zitat:

Zitat von mkinzler
Wie gesagt ist eine Anrede ein klarer Fall für die Normalisierung, während Orte normalerweise nicht normalsiert werden, obwohl sie eigentlich von der PLZ abhängig sind.


na seit den neuen PLZ ist das ja ein Thema für sich

Nersgatt 18. Dez 2008 17:25

Re: Frage zum DB-Design
 
Zitat:

Zitat von khh
wobei sich mir dann die Frage stellt ob immer bis zur 3ten Normalform ( oder noch weiter? ) normalisiert nwerden soll, oder ob in bestimmten Fällen Redundanz in Kauf genommen werden soll.

Es gibt durchaus Fälle, in denen man von der Normalisierung abweichen kann. Aber diese Fälle sind eigentlich sehr selten und sollten extrem genau dokumentiert werden.

Gruß,
Jens

DeddyH 18. Dez 2008 17:30

Re: Frage zum DB-Design
 
Bislang bin ich mit der 3. Normalform ganz gut gefahren. Nur, wenn etwas historisiert werden muss, wird denormalisiert und die Werte statt der Schlüssel weggeschrieben.

Blup 19. Dez 2008 08:55

Re: Frage zum DB-Design
 
Weitere Gründe für eine Adresstabelle:

Werden automatisch Briefe oder E-Mails generiert, gehört zu einer Anrede auch eine Briefanrede.

Frau -> "Sehr geehrte Frau %s," -> natürliche Person
Herr -> "Sehr geehrter Herr %s," -> natürliche Person
Familie -> "Sehr geehrte Familie %s," -> natürliche Person
Firma -> "Sehr geehrte Damen und Herren," -> Firmenadresse

Über die Anrede kann auch zwischen natürlichen Personen und Firmenadressen unterschieden werden.
Bei ersteren wird Titel, Vorname und Name getrennt erfasst. Für Firmen gibt es nur zwei Adresszeilen.
Für die Weiterverarbeitung der Daten in externen Systeme, zB. Bildung des Kontonamens für die Finanzbuchhaltung, kann diese Unterscheidung auch erforderlich sein.

Hansa hat weiter oben einige Beispiele aufgeführt, wo die Software nicht zwischen Firmenadressen und natürlichen Personen unterscheidet. Bei einer Firmenadresse ist die Anrede nicht Teil der Postanschrift, so sind zwei volle Zeilen für die Postanschrift erfassbar. Für natürliche Personen wird in der ersten Zeile die Anrede ausgegeben, darunter Vor- und Nachname.

fragile 23. Dez 2008 11:10

Re: Frage zum DB-Design
 
Ich versuche immer bis zur 3. Form zu normalisieren. Bin damit v.a. bei Erweiterungen der DB-Struktur immer gut gefahren


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz