Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Beziehungen richtig setzen

Begonnen von masterofdisaster, Mai 19, 2011, 14:16:39

⏪ vorheriges - nächstes ⏩

masterofdisaster

Hallo allerseits

Ich habe folgende Tabellen und Beziehungen angelegt (siehe Bild).

Beschreibung:
Das Ziel ist es, dass jeder Angestellte (Employee) mehrere Löhne (Salaries) haben kann. Jedoch darf pro Angestellter UND Jahr nur ein Lohn vorkommen (dies ist jetzt nicht der Fall)! Dieser Lohn setzt sich aus zwei Gehältern zusammen ("Salary1" und "Salary2"), die jeweils eine andere Währung haben.
Die Währungen sollen, je nach Jahr der Lohnzahlung, mit den entsprechenden Wechselkursen verknüpft sein ("ExchangeRate"), also pro Jahr UND Währung gibt es genau nur einen Wechselkurs.

Wie muss ich die Beziehungen setzen? Werden zusätzliche Tabellen benötigt oder müssen welche aufgeteilt werden?

Danke und Gruss.

[Anhang gelöscht durch Administrator]

database

Hallo,

welchen Datentyp hat das Feld IDYear in der Tabelle 'Years'?
M.E. ist diese Tabelle nicht unbedingt notwendig.

Du könntest auch Salary1Currency und CurrencyID sowie Salary2Currency und CurrencyID verbinden - passende Datentypen vorausgesetzt.
Auf das Feld YearSalary legst du einen eindeutigen Index damit das Jahr nur einmal eingetragen werden kann.

HTH

masterofdisaster

Zitatwelchen Datentyp hat das Feld IDYear in der Tabelle 'Years'?
Ist von Typ "Zahl". Es sollen, basierend auf dem Jahr, Berechnungen durchgeführt werden können.

Das Verbinden von SalaryXCurrency mit CurrencyID habe ich auch schon versucht. Als Auswahl sollen bei der Eingabe aber nur die Währungen mit den dahinterstehenden Wechselkursen erscheinen, die mit dem Wert des Jahres aus YearSalary übereinstimmen. Dies ist mir leider nicht gelungen.

ZitatAuf das Feld YearSalary legst du einen eindeutigen Index
Du meinst, "Ja (Duplikate möglich)"? Das geht nicht, denn IDSalaries ist schon Primärschlüssel und pro Jahr gibt es ja mehrere Employees. "Ja (ohne Duplikate)" geht, aber macht für mich nicht so viel Sinn. ODer verstehe ich das falsch?

Danke und Gruss

database

Hallo,

ZitatAls Auswahl sollen bei der Eingabe aber nur die Währungen mit den dahinterstehenden Wechselkursen erscheinen, die mit dem Wert des Jahres aus YearSalary übereinstimmen

Diese Art von Auswahl wäre dann im Eingabeformular zu bewerkstelligen und keinesfalls per Nachschlagefeöld in der Tabelle!
Man könnte das so lösen, dass abhängig vom Inhalt des Feldes mit der Jahreszahl, die Liste der anzuzeigenden Währungen in einem Kombifeld erstellt wird.

Zitat"Ja (ohne Duplikate)" geht, aber macht für mich nicht so viel Sinn. ODer verstehe ich das falsch?
Habe hier in meiner Antwort unterlassen anzugeben, dass über die Felder Employee und YearSalary ein eindutiger Indes zu legen ist.
Somit ist das Erfassen von mehreren Löhnen für ein und den selben Angestellten im gleichen Jahr nicht mehr möglich.
Die Tabelle 'Years' ergibt in deinem Datenmodell für mich keinen Sinn, daher hab' ich sie verworfen.
Die Änderung bezüglich Primärschlüssel in der Tabelle 'Currencies' kannst du beibehalten oder du beläßt den PK als Textfeld in beiden Tabellen.

Ich habe das in einem kleinen Beispiel mal so gelöst und unten angehängt.

HTH


[Anhang gelöscht durch Administrator]

masterofdisaster

Hallo Peter,

vielen Dank für deine Mühe mit der DB, das hat mir weitergeholfen.
Habe die Tabellen nun entsprechend verknüpft - macht viel mehr Sinn so.

ZitatDiese Art von Auswahl wäre dann im Eingabeformular zu bewerkstelligen...
Ja, das habe ich unterdessen auch gelernt, war mir nicht bewusst ;)
Zitatabhängig vom Inhalt des Feldes mit der Jahreszahl, die Liste der anzuzeigenden Währungen in einem Kombifeld erstellt wird
Kannst du da konkreter werden? Habe es mal mit VBA probiert und mich nach http://www.donkarl.com?FAQ4.36 orientiert. Bin ich da auf dem richtigen Weg?

Zitatüber die Felder Employee und YearSalary ein eindutiger Indes zu legen
Entweder mach ich was falsch oder das kann nicht gehen: Wenn ich mehrere Löhne für verschiedene Jahre derselben Angestellten habe, dann erscheinen diese (IDEmployeeSalaries) doch mehr als ein mal in der Tabelle. Ebenso ist es mit den Jahren. Dies ist jedoch bei eindeutigen Indizes nicht möglich (Fehlermeldung). Wie erreiche ich dann das gewünschte?

database

#5
Hallo,

ZitatBin ich da auf dem richtigen Weg?
JA, bist du, allerdings hadelt es sich in deinem Fall nicht um abhängige Kombifelder sondern um EIN abhängiges Kombifeld.
Die dahinter liegende Abfrage berücksichtigt dann eben nicht den Eintrag in einem weiteren Kombi sondern den Inhalt eines Textfeldes.
z.B. so ...  "SELECT id, xy FROM tabelle WHERE fremdID ='" & me.txtTextfeld & "'"

ZitatEntweder mach ich was falsch
Davon gehe ich aus ...  ;)

Du darfst den Index nicht auf jedes Feld einzeln legen sondern beide Felder markieren und so einen ZUSAMMENGESETZTEN eindeutigen Index erstellen.
Damit wird die KOMBINATION EmployeeID und Jahreszahl kontrolliert und die darf dann eben nur einmalig vorkommen.  ;)

Schau' dazu vielleicht mal hier rein:
http://www.ardiman.de/datenbanken/grundlagen/tabellen.html

HTH

masterofdisaster

Hey super, das mit dem Index klappt jetzt! Wusste nicht, dass es diese zusammengesetzten Indizes gibt.
Das mit dem Kombifeld werde ich noch genauer ansehen.