Datenbankdesign

Datenbankdesign

am 20.07.2006 04:14:21 von Dennis Kuntzemann

Hallo,

ich moechte eine DB mit mehreren Tabellen einrichten, u.a. die Tabellen
AussendienstMitarbeiter, Unternehmen und Vertraege.
Vertraege werden vom Aussendienst abgeschlossen, der Aussendienst arbeitet
immer nur fuer ein Unternehmen.
Ist es nun grundsaetzlich besser nur Verbindungen Foreign/Primary Key
zwischen Aussendienst-Vertrag, und Aussendienst-Unternehmen zu machen? Bei
einer Statistik wuerde man also das Unternehmen herausbekommen wenn man den
Weg Vertrag->Aussendienst->Unternehmen geht. Oder ist es grundsaetzlich
besser in der Tabelle Vertrag eine zusaetzliche Spalte Unternehmen mit
Foreign Key einzufuehren?

Vielen Dank fuer Eure Meinung!

Gruss

Dennis

Re: Datenbankdesign

am 20.07.2006 07:21:36 von Johannes Vogel

Hi Dennis

Dennis Kuntzemann wrote:
> ich moechte eine DB mit mehreren Tabellen einrichten, u.a. die Tabellen
> AussendienstMitarbeiter, Unternehmen und Vertraege.
> Vertraege werden vom Aussendienst abgeschlossen, der Aussendienst arbeitet
> immer nur fuer ein Unternehmen.
> Ist es nun grundsaetzlich besser nur Verbindungen Foreign/Primary Key
> zwischen Aussendienst-Vertrag, und Aussendienst-Unternehmen zu machen? Bei
> einer Statistik wuerde man also das Unternehmen herausbekommen wenn man den
> Weg Vertrag->Aussendienst->Unternehmen geht. Oder ist es grundsaetzlich
> besser in der Tabelle Vertrag eine zusaetzliche Spalte Unternehmen mit
> Foreign Key einzufuehren?

Du hast n Verträge pro Mitarbeiter und ein Unternehmen mit n Mitarbeitern.

Verträge hat id, idAussendienstMitarbeiter, ...
Unternehmen hat id, idAussendienstMitarbeiter, ...
AussendienstMitarbeiter hat id, ...

HTH, Johannes

Re: Datenbankdesign

am 20.07.2006 10:10:01 von Dennis Kuntzemann

"Johannes Vogel" wrote in message
news:ad6ee$44bf12cd$544a5456$23837@news.hispeed.ch...
> Hi Dennis
>
> Dennis Kuntzemann wrote:
> > ich moechte eine DB mit mehreren Tabellen einrichten, u.a. die Tabellen
> > AussendienstMitarbeiter, Unternehmen und Vertraege.
> > Vertraege werden vom Aussendienst abgeschlossen, der Aussendienst
arbeitet
> > immer nur fuer ein Unternehmen.
> > Ist es nun grundsaetzlich besser nur Verbindungen Foreign/Primary Key
> > zwischen Aussendienst-Vertrag, und Aussendienst-Unternehmen zu machen?
Bei
> > einer Statistik wuerde man also das Unternehmen herausbekommen wenn man
den
> > Weg Vertrag->Aussendienst->Unternehmen geht. Oder ist es grundsaetzlich
> > besser in der Tabelle Vertrag eine zusaetzliche Spalte Unternehmen mit
> > Foreign Key einzufuehren?
>
> Du hast n Verträge pro Mitarbeiter und ein Unternehmen mit n Mitarbeitern.
>
> Verträge hat id, idAussendienstMitarbeiter, ...
> Unternehmen hat id, idAussendienstMitarbeiter, ...
> AussendienstMitarbeiter hat id, ...
>
> HTH, Johannes

Hallo Johannes,

bist Du sicher dass es so gut ist? Wie soll ich denn in die
Unternehmer-Tabelle alle AussendienstmitarbeiterID reinbekommen?? Du
meintest das wohl genau andersherum oder?
Aber die Antwort heisst dann generell, keine unnoetigen Beziehungen zwischen
Tabellen herstellen, wenn man nich auch durch bestimmte Abfragen auf das
jeweilige Ergebnis kommen kann. Habe ich das richtig verstanden?

Danke und Gruss

Dennis

Re: Datenbankdesign

am 21.07.2006 08:44:46 von Johannes Vogel

Hi Dennis

Dennis Kuntzemann wrote:
> "Johannes Vogel" wrote in message
> news:ad6ee$44bf12cd$544a5456$23837@news.hispeed.ch...
>> Dennis Kuntzemann wrote:
>>> ich moechte eine DB mit mehreren Tabellen einrichten, u.a. die Tabellen
>>> AussendienstMitarbeiter, Unternehmen und Vertraege.
>>> Vertraege werden vom Aussendienst abgeschlossen, der Aussendienst
> arbeitet
>>> immer nur fuer ein Unternehmen.
>>> Ist es nun grundsaetzlich besser nur Verbindungen Foreign/Primary Key
>>> zwischen Aussendienst-Vertrag, und Aussendienst-Unternehmen zu machen?
> Bei
>>> einer Statistik wuerde man also das Unternehmen herausbekommen wenn man
> den
>>> Weg Vertrag->Aussendienst->Unternehmen geht. Oder ist es grundsaetzlich
>>> besser in der Tabelle Vertrag eine zusaetzliche Spalte Unternehmen mit
>>> Foreign Key einzufuehren?
>> Du hast n Verträge pro Mitarbeiter und ein Unternehmen mit n Mitarbeitern.
>> Verträge hat id, idAussendienstMitarbeiter, ...
>> Unternehmen hat id, idAussendienstMitarbeiter, ...
>> AussendienstMitarbeiter hat id, ...
> bist Du sicher dass es so gut ist? Wie soll ich denn in die
> Unternehmer-Tabelle alle AussendienstmitarbeiterID reinbekommen?? Du
> meintest das wohl genau andersherum oder?

Ich hatte wohl den Kopf nicht bei der Sache! Hab _ich_ das wirklich so
geschrieben? Das ist der grösste Blödsinn, den ich jemals sah! :-(

> Aber die Antwort heisst dann generell, keine unnoetigen Beziehungen zwischen
> Tabellen herstellen, wenn man nich auch durch bestimmte Abfragen auf das
> jeweilige Ergebnis kommen kann. Habe ich das richtig verstanden?

Nein, die Antwort lautet, dass wenn du später Vertrag und Unternehmen in
Verbindung bringen willst, musst du erst AussendienstMitarbeiter
zwischenschalten. Zwischen Unternehmen und Vertrag besteht nur über den
Mitarbeiter eine Relation.

Also nochmals:
Verträge hat id, idMitarbeiter, ...
Unternehmen hat id, ...
Mitarbeiter hat id, idUnternehmen, ...

select v.typ, u.name from Verträge v
join Mitarbeiter m on v.idMitarbeiter=m.id
join Unternehmen u on m.idUnternehmer=u.id
where u.name = 'Novartis';

Hoffe, ich sei heute wacher...?

Nebenbei: Statt AussendienstMitarbeiter solltest du alle Mitarbeiter da
reintun (falls sie sich ähnlich sind) und den Typ Aussendienst als
Attribut hinzufügen.

HTH, Johannes