2009-12-02 9 views
12

Ich habe daran gearbeitet, die Datenstruktur für eine Anwendung zu erstellen, an der ich arbeite. Eines der Dinge, die es handhaben muss, ist die Speicherung von Kunden-/Kontaktinformationen. Ich habe die Schnittstelle von ein paar verschiedenen Kontaktinformationsprogrammen wie Adressbuch, Google Mail Kontakte usw. studiert.Erstellen einer Kontaktdatenbank - Benötigen Sie eine kleine Schemainspiration

Ich habe im Grunde den Kontakt hinunter zu einer "Entität" gekocht (Individuum, Firma, Rolle, usw.).

  • Jedes Entity kann mehrere Adresse, Telefon haben, E-Mail Einträge.
    • Jeder von diesen definiert eine "Beziehung" (home/Arbeit/Assistent, etc.)
    • Entity {1} - {Beziehung} -> {0 .. *} Daten
  • Ein Entity können mehrere Felder haben, die für andere "generische" Datenfreiform-Datenspeicher sind (Geburtstage, AIM-Account, usw.)
    • Entity {1} - {fieldname} -> {0 .. *} Feld Daten
  • Ein Entity kann auf einen anderen Entity verknüpfen zum Beispiel als Mitarbeiter , Ehepartner
    • Entity {0 .. } < - {Beziehung} -> {0 ..} Entity

Hat jemand irgendwelche SQL-Implementierungen von ähnlichen Kontaktdatenbanken getan? Irgendwelche Einblicke/Vorschläge/Fallstricke, um zu vermeiden, dass Sie mit jemandem teilen könnten, der versucht, selbst an einem Projekt zu arbeiten? Scheint das, was ich beschrieben habe, vernünftig oder zu kompliziert?

Eine Frage, sagen wir, Sie haben 4 Leute, die alle für die gleiche Firma arbeiten. Sie alle haben die gleiche "Arbeit" Telefonnummer (vielleicht mit einer anderen Erweiterung) - Wenn sich die Nummer oder Adresse für "Arbeit" ändert, würde ich gerne in der Lage sein, die Kontakte ziemlich einfach zu aktualisieren. Jetzt hängt viel davon ab, wie Sie die Datenbank verwenden würden. Ich denke, dass es darum geht, die Angestellten mit ihren jeweiligen Unternehmenseinheiten zu verbinden, aber dann ist die Adresse/Telefonnummer nicht mehr direkt mit dem Angestellten verbunden. Ich diskutiere die Beziehung zwischen Entity und Daten so, dass Sie dieselbe Adresse/Telefonnummer an mehrere Personen anhängen können. Wenn Sie sie an einem Ort aktualisieren, können Sie sie überall aktualisieren. Überlege ich das gerade? zieht Haare aus

Antwort

14

Es ist ein bisschen banal, aber Sie müssen Ihre Daten wissen und was Sie damit machen werden, bevor Sie beginnen, Tabellen zu denken.

Ich würde vorschlagen, zu Object Role Modeling (oder this too) auch das Modell in Plain Englisch zu definieren, bevor Sie tatsächlich Tabellen implementieren. Ich benutze dieses VS-Plugin: NORMA, das auch ein Schema für Sie generieren wird.

Alternativ gibt es eine Reihe von data models here, die Sie begeistern können. Diese ist „Contact Management“ aber es gibt andere, wie zum Beispiel die „Kunden“ Abschnitt

(Ich wollte nur ein Bild schreiben ..) Contact Management http://www.databaseanswers.org/data_models/contact_management/images/contact_management_model.gif

+0

Große Ressource folgen mit dem Link –

+1

Danke für die Links, auf jeden Fall einige hilfreiche dort. Das Layout in diesem Bild scheint sehr ähnlich zu dem zu sein, woran ich mit der vielen/vielen Beziehung 'Customer_Addresses' gedacht habe ... Ich denke auch, dass dies die Wartung der Aktualisierung/Eingabe von Informationen übermäßig komplizieren könnte. I.E. Wie wählen Sie die "gleiche Adresse" als einen anderen Kontakt vs. duplizieren die Adresse in der Tabelle. – gnarf

+0

@gnarf: Ich habe dieses Modell nicht benutzt oder analysiert, sorry. Ich kenne nur die Website – gbn

1

Ein paar Punkte, die auftauchen, sind in der Regel in meine Erfahrung ..

Betrachten gegenseitige Beziehungen. Wenn beispielsweise jemand als Angestellter eines Unternehmens definiert ist, dann ist das Unternehmen per definitionem der Arbeitgeber dieser Person.

Denken Sie über Adressen als Entitäten an sich oder als nur freien Text, der mit einer Person/einem Ort verknüpft ist? In einigen Anwendungen ist die Adresse (physikalisches Gebäude usw.) "real" und nur eine kann in der Tabelle existieren. (Oft mit der Regierung/postalische Kennung dafür).

+0

Yeah - Gegenseitige Beziehungen waren bereits in Arbeit, ich stellte fest, dass Sie definieren könnten ** A ** ist ein * Angestellter von * ** B ** und daher ** B ** hat * Angestellter * ** A ** - Ja, Adressen werden absichtlich ihre eigene Tabelle sein, ich versuche, die Chancen zu verringern, doppelte Adressinformationen in der Tabelle zu haben, indem ich es potentiell eine Beziehung von vielen zu vielen mache .. Gleich mit Telefonnummern um zu wissen, ob bob die selbe # als joe hat ... – gnarf

4

Dies ist nur, um mit Ihrer zweiten Frage zu helfen; wobei die Telefonerweiterung tatsächlich zur Beziehung zwischen Personen und Unternehmen gehört.

contact_model_01

+0

Danke, das macht für Erweiterungen Sinn, ein Teil der "Beziehung" zwischen einer Person und einem Telefon zu sein. # – gnarf

+0

Aus Neugier - Woher kam dieses Bild? – gnarf

+0

@gnarf; Ich verwende Visio pro. –

2

Microsoft bietet eine Reihe von Starter-Datenbanken Schemata, einschließlich Assets Wartung, Kontakt-Management, Kunden und Bestellungen, Dokumentenmanagement, E-Commerce, Help Desk, Issue-Tracking-Software, Steuerungskleininventar, und Produktkataloge. Siehe Starter Database Schemas.


EDIT (April 2016): Es erscheinen die Microsoft Webmaster den Link brach. Hier ist die Wayback Machine archive der Seite.

+1

Diese Verbindung ist tot. –

+0

@Henry. Es sieht so aus, als ob der Microsoft Webmaster die Verbindung unterbrochen hat.Sie sollten sich wahrscheinlich an Microsoft unter [email protected] wenden und sie bitten, es zu beheben. Die E-Mail-Adresse wurde auf der Starter-Datenbank als Kontaktadresse angegeben. Aber ich wäre nicht überrascht, wenn der Microsoft Postmaster diese E-Mail-Adresse auch hätte. – jww