Mai 25, 2022, 12:50:18

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Datenbank Notenverwaltung

Begonnen von Kamado, Dezember 06, 2021, 15:23:37

⏪ vorheriges - nächstes ⏩

Kamado

Dezember 06, 2021, 15:23:37 Letzte Bearbeitung: Dezember 06, 2021, 19:52:03 von Kamado
Hallo zusammen,

nach langer Zeit könnte ich mal wieder eine Hilfestellung gebrauchen und bin sehr dankbar, hier eine Anlaufstelle gefunden zu haben. Ich bin in der Planungsphase. Die Datenbank soll meine Auszubildenden, die Lehrgänge und die Noten verwalten.

Die Noten bestehen aus 1+/ 1/ 1-/ 2+/ 2/ 2- ........ 6/ 6-. Die Lehrgänge sind z.B Schalen, Mauern, ......... .

Mein Problem:
Wie stelle ich es am besten an, dass ich von einem Auszubildenden die Noten aus mehreren Lehrgängen zusammenziehen kann (z.B. die Mitarbeitsnoten in den Lehrgängen Mauern (3+), Vermessen (2-) und Schalen (3)  ergibt die Gesamtnote 3+ in Mitarbeit ).
Ich denke die Note (z.B. 2-) muss in eine Dezimalzahl (2,33) umgewandelt werden, da ich sonst nicht damit rechnen kann. Das wäre dann für Mauern (2,66), Vermessen (2,33) und Schalen (3,00) = (7,99). Deshalb die Tabelle Notenspiegel. 
Wenn der Durchschnitt der Dezimalzahlen feststeht (7,99 : 3 = 2,66), muss daraus wieder eine Note gebildet werden (in dem Beispiel wäre es eine 3+)

Meine Vorarbeit sieht so aus:

tbl_Teilnehmer
Teilnehmer_ID (Primärschlüssel-Autowert)
TeilnehmerName (Text)
TeilnehmerVorname (Text)


tbl_Lehrgang
Lehrgang_ID (Primärschlüssel-Autowert)
LehrgangName (Text)


tbl_Notenspiegel
Notenspiegel_ID (Primärschlüssel-Autowert)
Note (Text) (z.B. 3+)
Dezimalnote (Zahl) (z.B. 2,66)


tbl_Noten
Noten_ID (Primärschlüssel-Autowert)
Fertigkeiten (Text)
Kenntnisse (Text)
Mitarbeit (Text) (z.B. 2-)
Teilnehmer_ID (Fremdschlüssel-Zahl)
Lehrgang_ID (Fremdschlüssel-Zahl)


Ab hier komme ich nicht weiter. Ich habe bereits einige Stunden mit Abfragen herumprobiert. So langsam geht mir die Puste aus.

Konkret sind meine Fragen:
Muss ich noch weitere oder andere Tabellen anlegen und wenn welche?
Wie muss die Abfrage aussehen damit die Notenaddition funktioniert?
Wie müssen eventuelle Formeln in der Abfrage aussehen?
Wie kriege ich den Dreh von der Dezimalzahl (2,66) wieder hin zu einer Note (3+).

Grüße Norbert

Ich muss noch sagen, dass ich in VBA und SQL nicht fit bin. Ich kann zwar die Programmierung kopieren und einfügen aber nicht selbst schreiben. Ich bin dabei dieses zu lernen. Zumindest habe ich mir schon mal einen dicken Schmöker zu VBA gegönnt. ;D
Nicht wundern wenn meine Antworten einen Tag dauern.  Familie, Arbeit, Access (In der Reihenfolge) ;)
Grüße aus dem Münsterland

Version - Access 2016

ebs17

ZitatMuss ich noch weitere oder andere Tabellen anlegen und wenn welche?
Für eine Diskussion zur Datenmodellierung solltest Du das Beziehungsbild zeigen und einige Erklärungen dazu machen.

Zu den Noten: Die Notentabelle würde ich stark verändern.
Die bestände bei mir aus der Dezimalnote als PK (Double oder besser Currency) und den Notentext (3+). Einen Umweg über einen Autowert mit Verknüpfung kann man sich hier sparen.

Damit ist die Note als Dezimalwert bei jeder Verwendung direkt greifbar für Berechnungen, für eine Anzeige wo nötig wird jeweils die Notentabelle mit dem Notentext hinzuverknüpft.

Zur Umsetzung der Rückberechnung einer Note aus einem berechneten Mittelwert aus den Dezimalzahlen erhält die Notentabelle zwei weitere Felder, die die Grenzen für die Wertebereiche enthalten. Als Beispiel:
3,3333 | 3- | 3,1666 | 3,5
Grenzen also Dezimalwert +/- 1/6

Berechneter Wert zwischen Untergrenze und Obergrenze, damit kommt man dann wieder schnell und einfach zu einem zugehörigen Notentext.
Mit freundlichem Glück Auf!

Eberhard

Kamado

Hallo Eberhard,

zunächst vielen Dank für deine Mühen.
Die Datenbank habe ich angepasst. Ich hoffe, dass ich alles richtig verstanden habe. Ist es richtig dass Dezimalnote_PK Indziert(ohne Duplikate) sein muss?
Mir ist auch noch nicht ganz klar wie ich die Verbindung von tbl_Notenspiegel nach tbl_Noten hinbekomme.

Ich habe noch keine Zeit gehabt mal was auszuprobieren.
Aber zunächst mal geht es mir um den Aufbau der Tabellen. Den Rest muss ich mir dann in einer ruhigen Minute mal anschauen.
Hier mal einige Bilder vom Aufbau:
Grüße aus dem Münsterland

Version - Access 2016

ebs17

Dezember 07, 2021, 14:26:01 #3 Letzte Bearbeitung: Dezember 08, 2021, 11:36:58 von ebs17
PK bedeutet Primary Key (Primärschlüssel), als Eigenschaft zum Feld. Das schließt eindeutige Indizierung ein.
Damit kannst Du diesen Schlüssel auch als Fremdschlüssel in tblNoten verwenden und eine Beziehung einrichten. Als Benennung vielleicht Fachnote, weil ...
Welche Rolle spielen die Felder Mitarbeit, Kenntnisse, Fertigkeiten?
Datenbanktechnisch sollte es keine solchen Aufzählungsfelder geben, sondern vier Noten ergeben vier Datensätze in der Tabelle, mit gleicher TeilnehmerID, gleicher LehrgangID und empfohlen einem gleichen Datumsstempel - könnte sein, dass Lehrgänge zu wiederholen sind, aber auch so ist ein Datum zur Lehrgangsteilnahme eine gute und später auch hilfreiche Information.

Damit wären dann diese drei Kopfnoten ebenso behandel- und verarbeitbar wie die Fachnote.

Für das Detail: Ein Operator BETWEEN (Zwischen) schließt beide Grenzen mit ein. Bei einem zufällig getroffenen Grenzwert hätte man also gleichzeitig zwei Noten. Die Grenzen laut Tabelle dürfen daher nicht überlappen, oder aber man gestaltet das Kriterium beim Nachschlagen so, dass eine Grenze immer exklusiv ist
Wert > UG AND Wert <= OG
Mit freundlichem Glück Auf!

Eberhard

Kamado

Welche Rolle spielen die Felder Mitarbeit, Kenntnisse, Fertigkeiten?

Ich versuche nochmal die Situation zu erklären. Es ist ja so oft das Problem mit den Sender und Empfänger. Ich bin übrigens in der Überbetrieblichen Ausbildung tätig.

Die Auszubildenden kommen in Gruppen zu 16 Teilnehmer immer für eine Woche nach mir. Mal hat die Gruppe eine Woche lang den Lehrgang Mauern. Ein anderes mal hat diese Gruppe eine Woche lang den Lehrgang Vermessen usw. In dieser einen Woche Mauern bekommt jeder Teilnehmer 3 Noten. Eine Note für die Fertigkeiten (Handwerkliches Geschick). Eine Note für die Kenntnisse (schriftlicher Test) und eine Note für die Mitarbeit.

Nach einem halben Jahr muss ich alle Mitarbeitsnoten der meinentwegen 8 Lehrgänge zusammenziehen und eine Durchschnittsnote bilden. Dieses muss auch für die Fertigkeiten passieren. Alle Noten für Fertigkeiten der 8 Lehrgänge werden zu einer Durchschnittsnote Fertigkeiten zusammengefasst. Für Kenntnisse dann genauso.

Die Sache mit dem Datum habe ich bewusst weggelassen um für uns die Angelegenheit so übersichtlich wie möglich zu halten. Das bekomme ich wohl hin ein Datum einzubauen. Auch dass die Teilnehmer noch in Gruppen eingeteilt werden habe ich bereits im Hinterkopf. Das traue ich mir zu es mit einzubauen. Wenn, dann bin ich bis jetzt immer an der Notenverabeitung gescheitert.

Da ich weiß, dass dort mein Knackpunkt liegt habe ich erst mal alles andere was ich vermutlich hinbekomme weggelassen. Wenn ich die Notensache geklärt habe, dann kann ich ganz entspannt in die Finale Planung gehen.
Grüße aus dem Münsterland

Version - Access 2016

ebs17

Zitat3 Noten. Eine Note für die Fertigkeiten (Handwerkliches Geschick). Eine Note für die Kenntnisse (schriftlicher Test) und eine Note für die Mitarbeit.
Diese drei Punkte gehören in eine weitere Tabelle, ich nenne sie mal Bewertung. Deren Primärschlüssel wird dann in die Notentabelle  verknüpft (Beziehung). Die anderen Felder entfallen. Es bleibt dabei: Pro Note ein Datensatz.

Notenverarbeitung nach der empfohlenen Struktur:
SELECT
   Teilnehmer_ID,
   Bewertung_ID,
   AVG(Note_ID) AS Durchschnittsnote
FROM
   tblNoten
GROUP BY
   Teilnehmer_ID,
   Bewertung_ID
Hier werden die Durchschnittsnoten über alle Teilnehmer und alle Bewertungspunkte ermittelt.
Hier könnte man bei Bedarf zusätzliche Filterungen einbauen, und selbstredend dann durch Verknüpfung mit den weiteren Tabellen die Klarnamen zu Teilnehmern, Bewertungspunkten und Notentexten bekommen.

Durch geringfügige Umstellung kann man dann auch z.B. einzelne Lehrgänge betrachten.
Mit freundlichem Glück Auf!

Eberhard

Kamado

Dezember 07, 2021, 17:53:31 #6 Letzte Bearbeitung: Dezember 07, 2021, 19:14:01 von Kamado
Vielen Dank Eberhard für deine schnellen Reaktionen heute. Auch deine geduldigen Erklärungen finde ich sehr gut.

Wie ich im ersten Beitrag schon geschrieben habe, ist meine wie wahrscheinlich auch deine Zeit knapp bemessen.
Ich glaube nicht, dass ich vor dem Wochenende dazu komme die Neuigkeiten umzusetzen. Ist das für dich in Ordnung wenn ich mich dann nächste Woche hier noch mal melde. Dann habe ich auch die Ruhe gehabt um die Neuigkeiten zu verstehen.

Grüße
Norbert
Grüße aus dem Münsterland

Version - Access 2016

Kamado

Hallo Eberhard,

nun habe ich wieder Zeit gefunden Leider bin ich schon wieder an einem Punkt der Verzweiflung ;).

Die Tabellen habe ich nach deinen Vorgaben angepasst, Ich hoffe, dass ich das richtig umgesetzt habe (siehe Foto Beziehungen).

Zitat von: ebs17 am Dezember 07, 2021, 14:26:01Als Benennung vielleicht Fachnote, weil ...

Ist die Benennung mit einem anderen Namen wichtig? Ich habe den Fremdschlüssel auch Bewertung_ID genannt.

Dann habe ich eine Abfrage gebildet. Siehe Foto

Den Original SQL-Code in der Abfrage habe ich dann mit deinem Code überschrieben
Dann kommt eine Fehlermeldung. Siehe Foto

Sorry, aber VBA und SQL sind wie schon beschrieben noch Böhmische Dörfer für mich. Bis jetzt habe ich mich immer mit Kriterien, Funktion: und Ausdrucksfeldern durchgehangelt.

Wie geht es dann mit der Rückberechnung (3,33) nach (3-) weiter? Wie sieht die Abfrage dazu aus?
Wie du schon siehst befinde ich mich mal wieder im nirgendwo ::)

Die Werte in den Spalten ObererGrenzwerte und UntereGrenzwerte habe ich wegen den Überschneidungen angepasst. Im Nachhinein völlig logisch.

Grüße Norbert



Grüße aus dem Münsterland

Version - Access 2016

ebs17

Dezember 11, 2021, 17:11:44 #8 Letzte Bearbeitung: Dezember 11, 2021, 17:54:51 von ebs17
Dezimalnote_PK kann ruhig ID heißen, es sollte aber ein Primärschlüssel sein. Aber: Benennungen nach eigener Wahl, es sollte nur ein durchgehendes System umgesetzt sein, das eine Übersicht und Verständlichkeit bedient.

Der Fehler (drittes Bild) ist selbsterschließbar. Bezeichnungen müssen schon korrekt sein (Unterstrich), etwas anderes ist eben etwas anderes und wird dann nicht gefunden.

Zur Abfrage
Generell: Besser den Inhalt der SQL-Ansicht als Text (Code) posten. Da steht alles drin, und letztendlich wird auch die SQL-Anweisung ausgeführt, nicht ein Gebilde aus Zeilen und Spalten.
Die Gruppierung über Noten_ID macht keinen Sinn, da diese doch eindeutig sein sollte. Für Deine Anliegen stört sie in der Abfrage.
Gerade wenn man Aggregieren (Durchschnitt) will und somit dazu Gruppieren muss, ist es oft schädlich, wenn man alles in die Abfrage hineinzieht, was man hat. Im Gegenteil: Nur das einbringen, was man wirklich benötigt für seine konkrete Berechnung.
Ich hatte nicht ohne Grund die gezeigte Abfrage auf eine Tabelle beschränkt.

ZitatWie geht es dann mit der Rückberechnung (3,33) nach (3-) weiter?
Zum Beispiel so:
SELECT
A.Teilnehmer_ID,
A.Bewertung_ID,
N.Note
FROM
   tbl_Notenspiegel AS N,
   (
      SELECT
         Teilnehmer_ID,
         Bewertung_ID,
         AVG(Dezimalnote_ID) AS Durchschnittsnote
      FROM
         tbl_Noten
      GROUP BY
         Teilnehmer_ID,
         Bewertung_ID
   ) AS A
WHERE
   A.Durchschnittsnote BETWEEN N.UntererGrenzwert
      AND
   N.ObererGrenzwert
Das könntest Du als Abfrage speichern, um diese Abfrage in einer weiteren Abfrage mit den Teilnehmern und Bewertungen zu verknüpfen.
Mit freundlichem Glück Auf!

Eberhard

Kamado

Dezember 11, 2021, 20:48:36 #9 Letzte Bearbeitung: Dezember 11, 2021, 21:00:37 von Kamado
Hallo Eberhard,

vielen Dank für deine Arbeit. Es hat funktioniert und ich habe wieder was gelernt.
Zuerst war ich noch ein wenig am schleudern.

SELECT
   Teilnehmer_ID,
   Bewertung_ID,
   AVG(Note_ID) AS Durchschnittsnote
FROM
   tblNoten
GROUP BY
   Teilnehmer_ID,
   Bewertung_ID

AVG(Noten_ID) AS Durchschnittsnote

Da es aber deine Nachlässigkeit war, muss ich dich hiermit ausdrücklich tadeln ;)
Ich hoffe du verstehst den Spaß.

Ich kann wie viele andere den Button "Thema gelöst" nicht finden.
Nochmal ein dickes Dankeschön!

Grüße Norbert
Grüße aus dem Münsterland

Version - Access 2016

Kamado

Hallo Eberhard,

eine Frage hätte ich noch zum Verständnis.
Ich habe die Logik nicht verstanden warum und wie die Durchschnittsnote aus der Noten_ID gebildet wird.

SELECT
   Teilnehmer_ID,
   Bewertung_ID,
   AVG(Noten_ID) AS Durchschnittsnote
FROM
   tblNoten
GROUP BY
   Teilnehmer_ID,
   Bewertung_ID

Das Ergebnis ist doch in der Datenblattansicht wiederum nur die Nummer der Noten_ID.  ???

Grüße Norbert
Grüße aus dem Münsterland

Version - Access 2016

ebs17

Dezember 12, 2021, 20:33:13 #11 Letzte Bearbeitung: Dezember 13, 2021, 12:27:00 von ebs17
AVG(Noten_ID) AS DurchschnittsnoteHier ist mit Noten_ID nicht der PK aus der Tabelle tbl_Noten gemeint, sondern der Fremdschlüssel, der dem Primärschlüssel aus tbl_Notenspiegel entspricht und der die Dezimalnote als Inhalt hat => Notenspiegel_ID oder so. Aus späteren Abfragebeispielen ließe sich das auch herleiten.
Für den Autowert-Primärschlüssel der Verknüpfungstabelle gibt es drastisch wenige Verwendungen, so dass er eigentlich allermeist entfallen könnte. Er wird nur aus Gründen der Systematik und Vollständigkeit mitgeführt.

Zitatdeine Nachlässigkeit
Wenn ich frei schreibe, dann schreibe ich auch durchaus FREI - aus Bildern abschreiben ist nicht meine Stärke weil Zeitverschwendung (das lasse ich gerne andere erledigen). Dabei kann man Fehler auch als gewollte Sollbruchstellen betrachten, die ein Verstehen des Ansatzes und ein eigenes sinngemäßes "Abschreiben" mit eigenen Bezeichnungen fördern, in Unterscheidung zum blinden Kopieren.
Bei einer vorhandenen DB mit den nötigen Tabellen hätte ich eher die Möglichkeit, durch Zusammenklicken die vorhandenen Bezeichnungen zu übernehmen.
Mit freundlichem Glück Auf!

Eberhard