AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wie am besten diese Relation abbilden?

Ein Thema von Igotcha · begonnen am 21. Jun 2006 · letzter Beitrag vom 21. Jun 2006
Antwort Antwort
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#1

Wie am besten diese Relation abbilden?

  Alt 21. Jun 2006, 01:16
Hallo zusammen,

ich habe gerade ein Problem damit die folgenden Relationen in Objekten abzubilden:

1) Kontakt (Kontakt-Objekt)
2) Firma (Firmen-Objekt)
3) Zusatzdaten des Kontakts in der Firma

wobei gilt:

Kontakt -> 1:n Firmen -> 1:1 Zusatzdaten

Also ein Kontakt (eine Person) kann in mehreren Firmen sein und in diesen Firmen hat der Kontakt genau eine Zusatzdate wie Telefon, Email, etc.

Mein Objekt "Kontakt" lädt alle Firmen-Objekte, in denen das Objekt "Kontakt" sitzt in eine TObjectList. Diese Relation ist problemlos. Da ich alles schon OO programmieren möchte ist jetzt mein Problem, wo packe ich die Zusatzdaten (ein neues Objekt?) rein? In das Objekt Kontakt macht es keinen Sinn, da diese Daten ja abhängig von der Firma sind. Im Objekt Firma macht es aber auch keinen Sinn, da die Zusatzdaten wieder vom Kontakt abhängen.

Mein praktisches Problem ist zudem die grafische Abbildung. In meinem Programm öffnet sich eine Form für den Kontakt. Auf einem Tabsheet werden in einer Listview die Firmen aufgelistet, in denen der Kontakt sitzt. Klickt man jetzt auf eine dieser Firmen sollen die Zusatzdaten des Kontakts in genau dieser Firma (objektorientiert) angezeigt und editiert werden können. Momentan löse ich das Problem durch einen Index von der ListView und lade die Daten "manuell" nach.

Auf dieser Form kann ich einem Kontakt auch eine zusätzliche Firma zuordnen, die dann als Objekt in der TObjectList von "Kontakt" hinzugefügt und mit der Methode TKontakt.Save vom Objekt gespeichert wird. Nun hätte ich gerne die Zusatzdaten in einer ähnlichen Form gleich mitgespeichert.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Wie am besten diese Relation abbilden?

  Alt 21. Jun 2006, 07:27
Hallo.

Bei deinem Modellierungsproblem kannst du die Regeln des Datenbankentwurfs anwenden und auf deine Klassen übertragen. Bei den Zusatzdaten handelt es sich genau genommen um einen Beziehungsdatentyp von Kontakten und Firmen. Mit der 1:1 Beziehung zwischen Zusatzdaten und Firmen erfasst du nur die Hälfte der Wahrheit, denn es gibt eine zusätzliche 1:n Beziehung zwischen Kontakten und Zusatzdaten.

Den Fremdschlüsseln des Datenmodells entsprechen die Objektverweise im Klassenmodell. Deine Zusatzdaten werden dann zweckmäßigerweise nicht als Referenz bei TKontakt oder TFirma geführt, sondern genau andersherum: ein Verweis auf TKontakt und TFirma wird bei TZusatzDaten geführt. Oft sehe ich, wie 1:1 Beziehungen in die Integration der beteiligten Datentypen münden. Dieser vermeintliche Optimierungsschritt ist weit verbreitet, verwässert aber ein Datenmodell ungemein. Besser ist es alle Entitäten auf Basistabellen abzubilden und die benötigte Zusammenlegung der Daten durch Views zu organisieren.

Grüße vom marabu
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Wie am besten diese Relation abbilden?

  Alt 21. Jun 2006, 10:14
Ok, was Du im zweiten Absatz beschreibst, ist der Grund meiner Fragestellung gewesen, da ich genau das vermeiden wollte.

Meinst Du jetzt sowas in der Art?
Delphi-Quellcode:
TZusatzDaten = class(TObject)
  FContactID: integer;
  FCompanyID: integer;
  FTelefon: String;
  FEmail: String;
  usw.
end;

TContact = class(TObject)
 bisherige Daten
 FZusatzDatenList: TObjectList;
end;
So dass beim Laden eines Kontakt-Objekts die Zusatzdaten aus der DB gelesen, TZusatzDaten-Objekte erstellt und in die FZusatzDatenList hinzugefügt werden?

Viele Grüße
Igotcha
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Wie am besten diese Relation abbilden?

  Alt 21. Jun 2006, 10:23
Ich glaube du hast mich richtig verstanden. Ob nun die Verweise in deinen Klassen über den PK oder einen Objektzeiger erfolgen, das ist dann eine Detailfrage, die du für dich noch klären musst. Das hängt auch mit deinem Konzept für das Laden der Daten aus der DB zusammen - load on demand (jeder Datensatz wird nur dann eingelesen, wenn er durch eine Benutzeraktion oder ein Ereignis angefordert wird) oder prefetch (alle Daten werden vorsorglich bereit gestellt).

marabu
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:57 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