Adressbuch

Die Tabellen "E-Mail-Adresse", "Internet-Adressen", "Nummern", "Vorwahl" und "Ländervorwahl" sollten wieder Freitextfelder sein...
Das hat folgende Gründe:
1. Es wird programmtechnisch rechtschwer alle diese Abhängigkeiten darzustellen. Also das bei neuanlage erste die Telefonnummer angelegt werden muss, dann die Email Adresse und dann die Internetadresse und erst dann kannst du das eigentliche Adressbuch in der Datenbank einpflegen.
2. Es macht keinen Sinn so etwas "vorzugeben". Das sind Werte die sich recht häufig ändern werden... Also sollen das die User gefälligst auch selbst ändern :)
3. Eine Tabelle aus definitiv einzigartigen Werten braucht man nicht, der Wert ist in der Tabelle "Adressbuch" sowieso vorhanden... Also warum noch einmal eine extra Tabelle die keine weiteren Informationen zu dem Schlüssel hält?
Zu 1: Irgendwie verstehe ich das rein von meiner Vorstellung nicht. Ich habe diese genannten Tabellen deshalb angelegt, damit eine Person mehrere Internet-Adresse, E-Mail-Adressen und Nummern sowie NachrichtSofortVersand haben kann. Man legt sich ja zuerst ein Adressbuch an, und fügt dann die Kommunikations-Adressen hinzu?

Zu 2: Inwiefern gebe ich etwas vor? Weil die Tabellen der Kommunikation-Adressen ausgelagert wurden? Man kann diese ja genauso ändern.

Zu 3: Äääähmm...:confused::confused::confused: von welchen einzigartigen Werten ist hier die Rede?

Wenn ich das zusammen fassen darf, dann möchtest du, dass all die von dir genannten Tabellen aufgelöst und in die Tabelle Adressbuch hinzugefügt werden sollen?
 
Werbung:
Ich habe diese genannten Tabellen deshalb angelegt, damit eine Person mehrere Internet-Adresse, E-Mail-Adressen und Nummern sowie NachrichtSofortVersand haben kann.
Ok, ich dachte es soll pro Adressbuch eine E-Mail Adresse eingetragen werden können...

Macht es hier nicht mehr Sinn die E-Mail Adressen/Telefonnummern und Internet-Adressen an eine Person zu binden und diese Optional mit einem Adressbuch zu verknüpfen?
Zu 2: Inwiefern gebe ich etwas vor? Weil die Tabellen der Kommunikation-Adressen ausgelagert wurden? Man kann diese ja genauso ändern.
Wenn man etwas in eine extra Tabelle auslagert und dann eine Referenz (einen Fremdschlüssel) drauflegt, gibt man dem User eine Eingabe vor... Weil er nur etwas eintragen kann was schon in dieser Tabelle vorhanden ist (es sei denn du legst den neuen Wert dann erst in der referenzierten Tabelle an... Was verdammt umständliche und anfällige Front-End Programmierung ist)
Zu 3: Äääähmm...:confused::confused::confused: von welchen einzigartigen Werten ist hier die Rede?
Die E-Mail Adressen/Telefonnummern und Vorwahlen. Die sind definitiv einzigartig (Schreibfehler bei der Eingabe mal nicht beachtet)
 
@Distrilec: Hallo, dachte du bist schon abgetaucht. :) Zu deiner Annahme, dass man zu einem Adressbuch nur eine Mail-Adresse etc anlegen kann, zeigt mir, dass ein Bild eines Front-End doch sehr wichtig ist. Denn alles Theorie in allen Ehren, jedoch merke ich selbst, dass man dann abschweift. Daher hier nochmal meine Bilder:
Adressbuch_1.jpg Adressbuch_2.jpg

Das musste sein :) Schau jetzt bitte ganze genau die Konnumikations-Adressen an. Eine Person kann mehrere Adressen haben. Und für jede Mail-Adresse, jede Mobilnummer, Fax-Nummer etc ein neues Adressbuch anlegen? Wäre das nicht ein bisschen zu viel? Du musst es dir so vorstellen. Sobald du das Fenster (Siehe Bilder) siehst, wird im Hintergrund von seiten meines Programms ein UUID generiert, und zwar für das Adressbuch. Und zu dieser UUID sollen dann all die Kommunikations-Adressen, Anschrift-Adressen etc zugewiesen werden. Es soll also möglich sein, dass man zu einer Person in einem Rutsch (rein theoretisch) unendlich viele Kommunikations-Daten, Wohnsitze, Anschriften hinzufügen kann. Deswegen habe ich die Tabellen ausgelagert. Und deine Idee, die Kommunikations-Daten der Person-Tabelle anzugliedern halte ich für falsch. Warum? Die Person-Daten sollen als Stammdaten gelten. Daten, wofür ich kein Adressbuch brauche. Ich brauche kein Adressbuch, wenn ich die Größe der Person, Haarfarbe der Person und Augenfarbe der Person, das Geburtsdatum, den Todestag, und den Namen der Person habe. Denn all diese Daten sind in meinern Augen nicht Adressbuch-würdig. Eine Person wird also zunächst als Stammdaten angelegt. Und was du dann mit der Person machst, das ist deine Sache. Es kann ja sein, dass die eben angelegte Person ja ein Schauspieler ist, und du willst die Person einem Film zuordnen oder einem Buch was auch immer. Deswegen werden Adress-Daten nicht mit der Person gekoppelt.

Aber eine weitere Frage. In deiner Version sind Ort und Postleitzahl in der Tabelle Adressbuch. Aber Orte werden ja auch wie Stammdaten behandelt. Die Stammdaten muss der Benutzer natürlich selbst anlegen. Meine Idee ist einfach, wenn ein Benutzer zum Beispiel viele Leute aus Hamburg kennt, dann muss er nicht jedesmal Hamburg eintippen, sondern sucht sich den Ort aus der Combobox aus. Deswegen habe ich Ort und Postleitzahl ausgelagert und sich nicht als Freitext behandelt.
 
Zu deiner Annahme, dass man zu einem Adressbuch nur eine Mail-Adresse etc anlegen kann, zeigt mir, dass ein Bild eines Front-End doch sehr wichtig ist.
Ein Bild des Front-Ends ist das letzte was ich brauche... Wenn ich das Modell für eine Applikation erstelle habe ich eigentlich ein Pflichtenheft vor mir liegen, aber da es deine Applikation ist und es den Rahmen dieses Forums sprengen würde, versuche ich gerade zu verstehen warum du etwas machst wie du es machst...
(Und jetzt kommt der wichtige Teil...) Bei deinem Modell war es auch NICHT möglich mehr als eine EMail-Adresse pro Adressbuch anzulegen :)

Aber um auf deine Anforderungen zurückzukommen:
Was mache ich jetzt mit einer Person von der ich keine Adressdaten habe, aber eine E-Mail Adresse? Die kann ich dann in deiner Applikation nicht hinterlegen? :)
Ich finde deine Ansätze bisher nicht schlecht... Nur sind sie leider etwas realitätsfern oder du willst eigentlich was ganz anderes, als das was dein Modell abbildet?

Aber egal... Setzen wir deine Relation einfach mal um:
Code:
Create Table kommunikationsmethoden_tab
(
comm_Id Char(32)
,addressbuch_id Char(32)
,comm_method Char(32) -- Enthält die Differenzierung zwischen Telefonnummer, EMail-, Internetadresse, etc.
,comm_value
);

Eine Tabelle mit einer Spalte (hier "comm_method" genannt) anhand welcher zwischen Telefonnummer, EMail- oder Internetadresse unterschieden wird...
Eine ID (hier "comm_id" genannt), wofür auch immer sie gut sein mag... (Warum willst du ne UID für eine EMail Adresse?)
Eine Referenz zum Addressbuch_Id (Fremdschlüssel auf die Tabelle "addressbuch" (Spalte: adressbuch_id))
Und ein Spalte für den eigentlichen Wert (in deiner Applikation dann ein Freitextfeld)
Das ist dann wenigstens mal ein Anfang...

Meine Idee ist einfach, wenn ein Benutzer zum Beispiel viele Leute aus Hamburg kennt, dann muss er nicht jedesmal Hamburg eintippen, sondern sucht sich den Ort aus der Combobox aus.
Was genau davon jetzt schneller ist... Darüber lässt sich dann streiten, oder?
Nehmen wir mal eine Person hat 2000 Facebook Freunde und entscheidet sich alle in deine Applikation zu übernehmen...
Um den Ort einzutragen hat er dann 2 Möglichkeiten:
a) Er tippt eben Hamburg ein
b) Er scrollt sich durch eine Liste mit 100+ Orten und sucht Hamburg (Bitte komm hier nicht erst auf die Idee ein Suchfeld einzufügen... Dann kann er es auch direkt eintragen...)
 
@Distrilec: Fangen wir mal dem Ende an. Du kennst sicherlich Programme, da haben Comboboxen zwei Funktionen, entweder du scrollst dich durch 1000+ Einträge (Items) oder aber, du kannst direkt in der Combobox schreiben, eben weil die Combobox auch als Textfeld funktioniert. Und bei mir mache ich das so, sobald du dann ein oder zwei Buchstaben eingetippt hast, kommt sowas wie eine "Autokorrektur", indem dann alle Wörter vorgeschlagen werden, die sagen wir mal mit "Ha" anfangen. Das könnte Hannover, Hamburg, Hamsphire etc sein. Und dann suchst du eben den Ort aus, den du willst.

Nun, das meine Ansätze realitätsfern sind, liegt daran, weil ich nur eine Vage Vorstellung von dem habe, wie Daten in der Datenbank untergebracht werden. Ich habe hier mein Programm, dazu schon meine Benutzeroberfläche, aber die Datenbank fehlt. Als hätte ich ein Auto gebaut, indem die Form, das Konstrukt etc schon beinahe fertig ist, aber der Motor will nicht ganz klappen :cool:

Und du sagst, dass Bilder eines Front-Ends das letzt sind. Aber ich dachte (vielleicht sollte ich weniger denken), dass man anhand der Bilder sieht, worauf die Person hinaus will. Ich sehe in meinem Bild, dass die Person zum Beispiel will, dass ein Benutzer zu einer Person (Freund, Verwandte, Familie etc) ein Adressbuch anlegen kann. Darüber hinaus sehe ich, dass es dem Benutzer möglich ist, dass er einer Person unendlich viele Wohnsitze (Anschrift) hinzufügen kann, viele Mail-Adresse und vieles mehr. Und das alles zu einer Person.

Ich hätte da ein Vorschlag. Wäre es das vielleicht ein Kompromiss, wenn ich mein Programm halbwegs fertig schreibe, es euch zur Verfügung stelle, und ihr euch "durchklicken" könnt? So nach dem Motto "Wenn ich jetzt hier drauf klicke, welche Daten gebe ich da ein?" oder "Was ist, wenn ich jetzt einen Film habe, und eine Person als Stammdaten, und diese dann miteinander verknüpfen will". Dann sieht man eben die ganzen Fenster kann sich das besser zusammen reimen als Bilder?

Ich habe mir schon überlegt euch zu fragen, ob ihr auf der Ebene der Datenbank bei meinem "Privat-Projekt" einklingen wollt? Da ich selbst Student bin, kann ich natürlich niemanden bezahlen. :cool:;) Ich programmiere auch nur in meiner Freizeit. Eben weil mir viele Programme nicht so ansprechen, wie ich sie gerne hätte, und weil ich sowieso etwas lernen will.
 
Ich starte mal einen weiteren Versuch. Grundlegend hätte ich es gerne so, dass von einer Person ein Adressbuch angelegt wird. Im realen Leben legt man ja auch nur ein Adressbuch für eine Person an. In diesem einen Adressbuch sind dann Privat-Daten und Geschäft-Daten enthalten.

So, im ersten Schritt gehe ich dazu über, dass ich zunächst eine Person anlegen will.
Person.jpg
Hier wird die Person Hanserle angelegt. Hier ist noch nicht klar um wen es sich handelt. Ist er mein Freund? Ist er ein Schauspieler? Ist er ein Autor oder was ist er? Diese Fragen spielen keine Rolle. Denn es wird ja deutlich, dass die Person hier zunächst einmal als Stammdaten angelegt wird. Deswegen werden auch nur Daten von der Person angelegt, die nicht Adressbuch-würdig sind. Niemand legt ein Adressbuch an, nur weil er/sie weiß, welche Augenfarbe, Haarfarbe und welche Körpergröße Hanserle hat. Hier sind also einfach nur neutrale Daten.

Nachdem wir die Person Hanserle angelegt haben, wollen wir ihn zu einem Adressbuch hinzufügen. Denn er ist unser Freund/Bekannter/Verwandter - was auch immer.
Anschrift.jpg
Wir sehen also, dass Hanserle einen Hauptwohnsitz, und zwei Zweitwohnsitze hat. Wir sehen, dass er einmal in Niedersachsen, Hamburg und Bremen wohnt. Dazu sehen wir dann die Postleitzahlen, und die dazugehörige Orte, sowie den Straßennamen. Aber wir haben auch noch mehr von Hanserle, und zwar Kommunikations-Daten

Kommunikation.jpg
Hanserle ist sehr gut zu erreichen. In der Kategorie Nummer, hier wären das Mobil-/Festnetz-/Fax- und Pagernummer. Hier setzen sich die Nummern aus den Ländervorwahlen, aus der Vorwahl und aus der Rufnummer zusammen. Und bei der Spalte Gerät wird einfach nur eingetragen, um welches Gerät es sich handelt. Handelt es sich hier um eine Nummer eines Pagers, Faxes, Mobiltelefones oder eines Festnetztelefones? Und in der Anmerkung kann man anmerken was man will. Da wir ja wissen, dass Hans insgesamt drei Wohnsitze hat, kann man in die Anmerkung schreiben, von welchem Wohnsitz folgende Nummer ist. Die Festnetznummer könnte ja zum Beispiel von Hamburg sein.

In der Kategorie NachrichtSofortVersand sehen wir, dass Hanserle auch über viele sogenannte Instant Messengers erreichbar ist. Wir haben seinen Benutzernamen für Skype, für MSN für ICQ und für Gabba Gabba. In den Anmerkungen kann man auch hier wieder schreiben was man will.

Auch hat Hanserle viele E-Mail-Adressen. Hier hat er genau drei Stück. Und in den Anmerkungen kann man auch wieder beliebig reinschreiben was mann will.

Und zum Schluss haben wir einige Internet-Adressen von Hanserle. Und auch hier können wir dann eine freie Anmerkung zu den jeweiligen Adressen schreiben.

Nun habe ich mir nochmal überlegt, wie ich das alles in einer Datenbank abbilden kann. Für eine Person, nur ein Adressbuch, mit vielen Daten. Raus kam dabei das hier:
Adressbuch.png
Ich habe hier einige Bereich mit grün und andere mit rot markiert. Fangen wir mal mit der Kommunikation an, rechts im Bild. Ich dachte, man könnte dies durch eine m:n-Beziehungen erledigen. Wobei ich hier auch nicht sicher bin, ob hier der Lösungsansatz korrekt ist. Aber ich dachte dabei auch an folgende Situation. Angenommen ich kenne ein Pärchen. Ich habe sowohl den Mann als auch die Frau einzeln abgespeichert, weil sie weitestgehend unterschiedliche Komminukation-Daten haben. Das heißt, ich habe sowohl für den Mann als auch für die Frau jeweils ein Adressbuch angelegt. Da das Pärchen aber zusammenleben, haben beide die gleiche Festnetznummer. Das heißt, sowohl beim Mann als auch bei der Frau kommen die Festnetznummer doppelt vor. Das heißt, eine Person kann viele Festnetznummer haben, und eine Festnetznummer kann vielen Personen zugeordnet werden. Daher kam ich auf die m:n-Beziehung.

Als nächstest habe ich Kanton, Bundesland, Bundesstaat, Grafschaft und Provinz zusammengefasst und daraus eine Tabelle Region gemacht. Es ist hier also völlig unwichtig zu wissen, um was es sich bei dem Namen der Region handelt. Ich meine, die Datenbank braucht ja nicht zu wissen, ob bei dem Namen Bremen um ein Bundesland, Bundesstaat, um eine Provinz oder um eine Grafschaft handelt. So spare ich mir die ganzen einzelnen Tabellen. Weiterhin habe ich die Tabellen Postleitzahlen, Postfach und Ort sowie Land ausgelagert und sie alle mit der Zwischentabelle Adressbuch_Region verknüpft. Warum? Diese Daten können und sollen auch als Stammdaten angelegt werden. Aber die Stammdaten legt der Benutzer schön selbst an. Und die restlich grün eingerahmten Tabellen werden hier auch als Stammdaten behandelt, und können dann zum Adressbuch entsprechend hinzugefügt werden. Aber viel wichtiger ist, dass pro Person ein Adressbuch angelegt werden soll. Und pro Person kann viele Anschriften haben. Das heißt, eine Person kann in vielen Regionen und Orten leben/wohnen. Und viele Regionen und Orte können vielen Person zugeordnet werden. Daher hier die m:n-Beziehung.

Ich hoffe, dass ich mich etwas besser japanisch formuliert habe :cool:
P.S. Im Anhang sind die DDL-Statements als *.txt-Datei angelegt worden.
 

Anhänge

  • xarphus.txt
    21,5 KB · Aufrufe: 0
Zuletzt bearbeitet:
Du hast gerade die letzten 20 Posts von dir nichtig gemacht...
Wenn es nur ein Adressbuch pro Person geben soll muss man das ganze natürlich ganz anders aufziehen...
Hier dann aber die Frage: Warum braucht man dann die logische Einheit "Adressbuch" ? Kann man diese nicht reduzieren und einfach direkt die Person verwenden?...

Ich bereite die Tage mal was vor...
 
Ich bin selbst ein wenig unsicher. Du hast ja mein Programm schon gesehen, also auf den Bildern. Und du hast gesehen, dass ich neben Adressbuch auch viele andere Sachen verwalten will. Daher diese logische Einheit "Adressbuch". Ich denke da eher real. Ich habe hier ein richtiges Adressbuch vor mir liegen. Aus Pappe und Papier. Und nun trage ich eine Person ein, von der ich erst einmal die Telefonnummer habe. Später kommt von der Person weitere Daten hinzu, wie zum Beispiel Anschrift oder Mail-Adresse etc. Und ich verwende doch dann nicht jedesmal eine neue Seite für die Person? Ich schreibe dann alles gruppierend dann auf einer Seite, alles was zu der Person gehört. Das ist also die Realität. Und so ähnlich versuche ich es auch in die Datenbank abzubilden. Man bekommt ja nicht alle Daten von einer Person auf einem Schlag, sondern immer nach und nach. Und diese sollen dann zu den bereits vorhandenen Daten "hinzugefügt" werden. So habe ich mir das auch vorgestellt.
 
Werbung:
Zurück
Oben