PDA

Vollständige Version anzeigen : Richtige Beziehungen erstellen - Wie?


0815Peter
17.01.2008, 10:55
Hallo, mir raucht der Kopf!
Kurze Beschreibung des Vorhabens:
Für eine Maßnahme soll eine DB erstellt werden. Für diese Maßnahme sind bisher folgenden Tabbelen erstellt worden: Stammdaten (TN-Infos), Berufsschulen (div. Berufsschulen mit Adr.) u. Berufsschuldetails (Klasse, Lehrer etc.), abH-Standorte (Standorte mit Adr. etc.) u. abH-Details (Gruppen, Sozialpädagoge, Dozent etc.), Ausbildungsfirmen (Firmenname, Adr. etc.) und Ansprechpartner in diesen Firmen. (Details siehe auch in angehängter Bilddatei)
Ich scheitere jetzt schon daran die Beziehungen richtig zu setzen, sodass ich jetzt z.B. ein Eingabeformular erstellen kann mit dem ich einen neuen Teilnehmer mit allen Daten anlegen kann. So möchte ich auf dem Formular neben einfachen Textfeldern über die z.B. der Name, Geburtsdatum etc. eingegeben wird, z.B die Berufsschule über ein Dropdownfeld auswählen können und danach soll in einem weiteren Dropdownfeld eine Klasse dieser Berufsschule ausgewählt werden können (es sollen in diesem zweiten Dropdownfeld also dann nur die Klassen dieser jeweiligen Schule auswählbar sein). Ähnlich dann bei den Maßnahme Standorten wo ich dann im Anschluss eine Gruppe mit zugehörigen Daten über ein Dropdownfeld auswählen kann.
Bisher habe ich es lediglich geschafft ein Formular mit Unterformular zu erstellen, sodass ich z.B. den Namen einer Berufsschule eingebe und im Unterformular kann ich für diese Schule dann Klassen eingeben. Ich möchte aber eben jetzt diese Detailinformationen noch in Beziehung setzen zu einem bestimmten Teilnehmer und das bekomme ich nicht hin!
Über Lösungshinweise freue ich mich und danke im Voraus!

Prian0815
17.01.2008, 11:11
Ich möchte aber eben jetzt diese Detailinformationen noch in Beziehung setzen zu einem bestimmten Teilnehmer und das bekomme ich nicht hin!

Dafür brauchst du in der Teilmnehmertabelle(tblTeilnehmer) für jede Zusatzinfo(z.B.: Berufsschule) je ein Foreign-Key-Feld. Dieses muß denselben Datentypen(meist Integer oder LongInteger) haben wie das Primär-Key-Feld der entsprechenden Tabelle. Das Primär-Key-Feld der Tabelle(z.b.: tblBerufsschulen) verbindest du dann mit dem Foreign-Key-Feld der Tabelle Teilnehmer und schon hast du eine Beziehung. Die Art der Beziehung ist dann noch abhängig von den Einstellungen(Eigernschaften) der jeweiligen Key-Felder in den Tabellen. Aber mit etwas Rumspiielerei kommst du da dann schon dahinter.

0815Peter
17.01.2008, 11:23
Danke für die Antwort! Die Foreign Keys habe ich ja schon (s.Anhang in meinem ersten Post) und ich habe ja auch schon damit herumgespielt, aber ich bekomms nicht hin. Mir ist die Art der Beziehung nicht klar und welche ID jetzt wo gespeichert werden muss. Die Berufsschulen und die Details betrachtet ist es ja eigentlich ganz einfach: Ich habe eine Tabelle mit ein paar Berufsschulen und in jeder Berufsschule gibt es wiederum mehrere Klassen, also 1:n-Beziehung. Wie muss jetzt aber die Beziehung dieser beiden Tabellen (Berufsschulen und Berufsschulendetails) in die Stammdatentabelle eingebunden werden. Welcher Foreign Key muss wo gespeichert sein?

0815Peter
17.01.2008, 12:21
Hab mir jetzt auch nochmal diese Bestellungen_N_M-DB angeschaut, die hier im Forum irgendwo gepostet war. Auch hieraus werd ich irgendwie nicht schlau. Mein Vorhaben kann doch wirklich nicht so schwer sein. Ich denke, ich bräuchte nur einen kleinen Hinweis wie ich die Beziehungen richtig herstelle, dann würde ich das Weitere ja evtl. alleine hinbekommen.
Hat noch jemand nen kurzen Tipp?
Sorry, dass ich in so kurzer Zeit nochmals poste, aber ich bin gleich von der ersten Seite runter und dann ist's aus den Augen aus dem Sinn. Bin auch etwas unter Zeitdruck, weil die DB eigentlich gestern stehen hätte sollen. Das nur zur Erklärung für mein aufdringliches Verhalten ;-)

0815Peter
22.01.2008, 18:17
Hallo, langsam komm ich mir echt total bescheuert vor. Ich krieg's einfach nicht hin! :-(
Ich kann mit den bestehenden Beziehungen keinerlei Abfragen oder Formulare basteln. Sobald sich eine Abfrage/Formular auf Daten aus einer anderen Tabelle als die Stammdatentabelle bezieht, bekomme ich keine Ergebnisse mehr. Solange nur Daten aus der Stammdatentabelle genutzt werden, klappt es.
Was mache ich falsch? Für Hilfe danke ich im Voraus!

Josef P.
22.01.2008, 18:36
Vielleicht verwendets du inner join statt left join in den Abfragen. Es fehlen aber Einträge, damit bei Inner Join DS geliefert werden.

Beachte: die Linien im Beziehungsfenster haben nichts mit den Linien in der Entwurfsansicht einer Abfrage zu tun. In der Abfrage visualisieren diese nur die Join-Ausdrücke. (mit einem Doppelklick auf eine solche Linie kannst du Left/Right/inner-Join einstellen)

Lanz Rudolf
22.01.2008, 18:40
Hallo
Seit ihr hier ein klub von 0815 Brüder ? ;) :mrcool:

SaschaBHH
22.01.2008, 18:43
Hallo 0815 Peter,

Überprüfe mal die Beziehung Dozent zu abH_Details. Tip: Verwende möglichst keine Leerzeichen bei irgendwelchen Benennungen (löst das Problem aber nicht). Ich würde aber die Berufsschule mit den Stammdaten verbinden. Und dann die Details zur Berufsschule mit der Berufsschule selbst. Die Berufsschule selber besteht ja immer, aber nicht zwangsweise ein Detaildatensatz dazu. Änder das mal und wende das auch auf die anderen Beziehungen an.

Leider kann man das nicht mal eben schnell nachbauen (zu viele Felder)

SaschaBHH
22.01.2008, 18:45
ich bin nicht in diesem Club, aber ich benutze 4711 Kölnisch Wasser! :grins:

hcscherzer
22.01.2008, 18:47
Moin,
auch nochmal diese Bestellungen_N_M-DB angeschaut
in Deinem Beziehungsentwurf sind ja bislang noch keine m:n Tabellen drin ... das ist ja gut möglich, dass Du ohne auskommst. Die bräuchtest Du auch nur, wenn zum Beispiel ein Teilnehmer mehr als einen Firmen-Ansprechpartner haben könnte. Oder an mehr als einem aBH Kurs teilnimmt (what ever it is).

0815Peter
22.01.2008, 19:01
@alle: Danke für die Antworten!
Mit diesen leftjoin-tralala ;-) komm ich glaube ich weiter. Ich werd da mal weiterprobieren.
Kurz aber zur Erklärung der Struktur (ich hab sowas noch nicht wirklich gemacht, geschweige denn gelernt :-): Es soll eine DB werden zur Verwaltung von Kursteilnehmern. Ein Kursteilnehmer kann in EINEM Betrieb, EINER Berufsschule, EINEM Nachhilfekurs, an EINEM Standort sein. ABer es ist ja so, dass ich mehrere Teilnehmer habe, die auf der gleichen Berufsschule sind, aber in unterschiedlichen Klassen; analog dazu die Betriebe:zwei Azubis sind in der gleichen Firma, haben dort aber unterschiedliche AUsbilder/Ansprechpartner. Ich möchte jetzt einfach ein paar Abfragen, Formulare und Berichte erstellen, um die Daten komfortabel zu verwalten. Was will man mit einer DB auch sonst ;-)
Werd mich morgen dann nochmal melden, wenn ich weiter herumprobiert hab. Jedenfalls nochmals Danke!

gpswanderer
22.01.2008, 19:40
Hallo,
nach meiner Auffassung sind die Beziehungen grundsätzlich falsch. Der Stammdatensatz kann eigentlich nicht Bestandteil von Beziehungen sein bei der er der n-Teil ist. Eine 1:n Beziehung von "abH Details" zur Stammdatentabelle wobei der n-Teil die Stammdatentabelle ist macht keinen Sinn. Das muss umgekehrt sein. Dabei enhält die "abH Details" den Fremdschlüssel zur Stammdatentabelle. Die Stammdaten werden auch mit der Firma in Beziehung gesetzt und nicht zu den Firmennamen. Gleiches gilt auch für die Schulen. Da fehlen auch etliche n:m Beziehungen. Z.B. für die Dozenten. Auch die Stammdatentabelle sollte aufgeteilt werden. Die Gespräche müssen in eine extra Tabelle. 1:n mit der Stammdatentabelle in Beziehung gesetzt. Es sind ja mehr Gespräche notwendig als 2.

0815Peter
24.01.2008, 16:31
Ich stell mich sowas von blöd an, dass ich schon an mir selber zweifle. Ich hab jetzt in den letzten Tagen viel rumprobiert und auch von einem Kollegen ein Buch bekommen, wo vieles zum Thema drin steht ("Das Access 2003 Entwicklerhandbuch" von Andre Minhorst). Dennoch klappt es bei mir nicht wirklich :-( Im Anhang sind die Tabellenbeziehungen zu sehen so, wie sie im Moment sind. Trotzdem kann ich irgendwie keine Abfragen und Formulare erstellen, die zu vernünftigen Ergebnissen führen.
An was kann das liegen? Hat bitte jemand noch nen Tipp für mich! Danke im Voraus!

SaschaBHH
24.01.2008, 20:03
Hi,

Du hast aber die Beiträge alle gelesen? :)

Bevor man hier nun das richtige Datenbank-Modell in Worten verfassen will, wäre es doch nett, wenn Du eine Beispiel db zur Verfügung stellst.

Vielleicht hilft Dir ja eine Veranschaulichung anhand eines Beispiels besser.

So long....

gpswanderer
24.01.2008, 21:06
Hallo,
ich sehe das genau wie Sascha. Mache eine BeispielDB mit einigen Spiedaten und lade die hier hoch. Vieleicht noch eine Erklärung was die Tabellen beinhalten.
Mit diesen leftjoin-tralala ;-) komm ich glaube ich weiter. Bevor Du Dich ernsthaft mit diesem Tralala beschäftigst, muss erst das Datenmodell stimmen und die Beziehungen im Beziehungsfenster angelegt sein.
Sonst geht das "leftjoin-tralala " in die Hose.

0815Peter
24.01.2008, 21:46
Sorry, aber ich dachte, ich hätte mein Vorhaben hinreichend erklärt als ich diesen Thread hier eröffnet habe?! (s. Post 1) Die Tabellen sind ja auch schon da, sonst könnte ich ja keine Beziehungen herstellen. Ich wollte jetzt ja auch nur wissen, ob ich die Beziehungen jetzt eigentlich richtig hergestellt habe, so wie gpswanderer das gemeint hat. Deswegen hab ich ja nochmal ein Bild von den Beziehungen angehängt, da sieht man ja auch alle Tabellen, die ich habe. Hat sich das jemand angeschaut und kann vielleicht sagen, ob das okay ist oder nicht?
Kann im Moment auch leider keine Bsp-DB hochladen, da ich Zuhause bin und das Teil in der Arbeit :-)

gpswanderer
24.01.2008, 21:52
Hallo,
sorry, aber das ist mir einfach zu viel Aufwand das zu Beschreiben, was ich da ändern würde.
Die Firmenansprechpartner gehören nicht an die Stammdaten, sondern an die Firma und die Firma an die Stammdaten.
Man müsst auch nähere Infos haben zu den Tabelleninhalten.
Ohne Beispieldb ist das einfach zu abstrakt.

SaschaBHH
24.01.2008, 22:01
Nun gut Peter0815,

ich glaube einfach, dass es schwer ist ein Datenbank-Modell in Worten zu erklären. Deshalb ist es wohl notwendig eine Beispiel DB zu zeigen.

Buch-Autoren nutzen häufig ein Kapitel zum Thema Tabellen und Datenbank-Struktur/Modell. Dein gesetztes Ziel ist nicht gerade eines für "Anfänger" und gerade deshalb versteht (so glaube ich) jeder Dein Problem. Aber ein Kapitel darüber will man sicher nicht schreiben.

Lade ein Muster hoch...und dann sehen wir weiter. Und man muß sicher nicht alles sofort verstehen, aber Lesen (in Deinen Büchern) oder suchen im Forum bringt so einiges zu Tage. Und fragen darfst Du hier immer...

0815Peter
25.01.2008, 13:14
Hallo, ich hab mich da wohl etwas zu sehr reingesteigert und zu viele Infos, die ich erst verdauen muss, um mir dann ein Gesamtbild zu machen. Mir sind da jetzt beim Zusammenstellen der Beispiel-Datenbank auch Dinge aufgefallen, die eigentlich nicht passen können. Trotzdem anbei jetzt die Beispiel-DB und nochmals das Ziel: Es soll für einen Kurs eine Teilnehmerverwaltung (TN-Daten = TN-Stammdaten-Tbl) erstellt werden. Die Kursteilnehmer sind jeweils in 1 Berufsschule (BS) un in dieser in 1 Klasse. Es kann natürlich mehrere Kursteilnehmer geben, die in der selben BS sind und in der gleichen oder unterschiedlichen Klassen dieser BS. Analog läuft es mit den Maßnahme-Standorten, an denen es wieder verschiedene Gruppen für die Kurse gibt, wobei 1 Dozent an einem Standort auch mehrere Kurse leiten kann. Natürlich kann man in gleicher weise noch die zuständigen Sozialpädagogen auslagern etc. Falls noch mehr Details nötig sind, einfach melden! Ich freue mich über Anregungungen und danke im Voraus.

SaschaBHH
26.01.2008, 12:06
Hallo 0815Peter,

da die DB schon einmal "aufgerufen" wurde, gehe ich davon aus, dass bereits jemand am "Helfen" ist. Ich beobachte das Thema weiter und ggfs werde ich mich der Sache annehmen. Es müssen ja nicht zwei Leute daran arebieten.

gpswanderer
26.01.2008, 17:49
Hallo Sascha,
das war ich, aber ich habe im Moment zu viele Baustellen (nicht nur hier:grins:) . Also dann Bahn frei.

0815Peter
28.01.2008, 11:47
Hallo, jetzt sitze ich schon wieder davor und irgendwie wird alles immer komplizierter. Kurze Frage, ob ich zumindest das bisher richtig verstanden habe:
Ich habe jetzt z.B. meine Tabelle mit meinen Kursteilnehmern, was für mich ja meine zentrale Tabelle ist und ich habe die Tabelle mit den Standorten der Berufsschulen und die dazugehörige Detailtabelle mit den Infos der jeweiligen Klassen, Lehrer etc. in der jeweiligen Berufsschule. Die Tabelle mit den Standorten steht doch mit der Tabelle mit den Standortdetails in einer 1:n-Beziehung, weil ich doch in einer Berufsschule mehrere Klassen habe. Oder? In der Berufsschuldetailtabelle ist doch dann der Fremdschlüssel der Berufsschul(standort)tabelle gespeichert. Den Schlüssel der Berufsschuldetailtabelle muss ich doch dann in meiner TN-Tabelle speichern, weil ich doch dann über diesen Schlüssel sagen kann an welcher Schule und in welcher Klasse der TN ist!?! Somit ist doch der Schlüssel der Berufsschulstandorte für meine TN-Tabelle eigentlich irrelevant, weil ich dadurch ja nur die Berufsschule "weiß", aber nicht weitere Details (Klasse, Lehrer etc.) dazu. Oder? Analog wäre es ja auch bei den Firmen und Maßnahmestandorten?!?
Oder liegt hier ein Denkfehler meinerseits vor? Über Rückmeldungen bin ich dankbar.

Edit: Hmmm, dan ist mir aber natürlich aufgefallen, dass es ja sein kann, dass ein TN an einem Standort/Berufsschule ist, aber man evtl. noch nicht weiß in welchen Kurs/Klasse der geht. Dann muss man ja erst mal die ID des Maßnahmestandorts/Berufsschulstandorts irgendwo hinspeichern. Ich steh im Wald, wo sind die Bäume? :-((

SaschaBHH
28.01.2008, 17:42
Hi Peter0815,

hast Du jetzt etwas an der hochgeladenen MDB verändert? Nicht das wir beide unterscheidliche Datenstrukturen haben.

Peter0815, Du steckst aber voll drin! :grins:

Keep it cool. Sobald sicher ist, daß Du nichts an der hochgeladenen Struktur verändert hast, dann geht s los... Schritt für Schritt :)

@gpswanderer: Danke für den Hinweis.

0815Peter
28.01.2008, 18:07
Hallo Sascha, nein ich hab nichts verändert. Ich hab hier ungefähr 27 Testdatenbanken auf denen ich alle möglichen Beziehungen rumprobier :-)) Freu mich auf jeden Fall, dass du mir helfen möchtest.
Mein aktuelles "Projekt" (Datenbankvariante 17 :-) sieht vielversprechend aus, kann aber natürlich komplett falsch sein. Ich hab jetzt z.B. eine Zwischentabelle aufgenommen, die sowohl den Schlüssel der BS-Tabelle als auch den der BS-Detailtabelle aufnimmt. Und den Schlüssel dieser Zwischentabelle hab ich dann mit einem Feld in meiner TN-Stammtabelle verbunden.
Aber ich bin mal gespannt auf deine Unterstützung und danke natürlich im Voraus!

SaschaBHH
28.01.2008, 18:12
Hi Peter,

habe die Datenbank schon gesaugt und mir mal angeschaut. Deine Feldnamen sind ja verwirrend...:grins:

Mal so vorab. Wo kann ein Kursteilnehmer herkommen? Nur aus der Berufsschule (und somiit aus einem Ausbildungsbetrieb)?

0815Peter
28.01.2008, 18:15
Die Teilnehmer melden sich bei uns an bzw. werden uns zugewiesen. Alle sind Auszubildende, die alle in 1 Betrieb sind und alle an 1 Berufsschule sind, normal oder :-)) Die sollen dann bei uns am jeweiligen Standort in 1 Kurs eingeteilt werden.

SaschaBHH
28.01.2008, 18:16
2 Frage.

Ein Kurs wird entweder vom Pädagogen oder Dozentr geleitet, oder sind immer beide pro Kurs anwesend(zuständig)?

0815Peter
28.01.2008, 18:27
Es sind immer beide anwesend/zuständig. Es ist aber natürlich so, dass wir mehrere Kurse haben und da sowohl der Sozpäd als auch der Dozent mehrere hat, aber es sind nicht immer der gleiche Sozpäd und Dozent für einen Kurs verantwortlich, sondern das kann bunt gemischt sein.

SaschaBHH
28.01.2008, 18:28
1 Betrieb sind und alle an 1 Berufsschule sind, normal oder :-))

Normal? In der von Dir besagten Angelegenheit wohl. Im übrigen fällt dieser Thread unter den Begriff "Normalisierung" einer Datenbank. 1NF (Normalform), 2NF und 3NF. Ist aber auch schön in dem Buch, welches Du Dir geliehen hast, beschreiben (Kapitel 2 meine ich). Habe es mir auch gekauft :)

Ich gehe davon aus, das ein Kurs an mehreren Orten stattfinden kann.

Also: KursnummerID 123 Thema: Access für Anfänger Ort: A
KusrnummerID 124 Thema: Access für Anfänger Ort: B

In so einem Fall hätten wir noch eine Themen Tabelle. Aber das hängt von den Anforderungen ab.

Ach ja, sei bitte so fair, wenn Du zwischenzeitlich eine Lösung gefunden hast es mir mitzuteilen. Danke.

0815Peter
28.01.2008, 18:34
Nein, würde da dich jetzt nicht rumbasteln lassen, wenn ich das schon hätte, keine Angst :-)
Ja, das mit dem Normalisiern der Daten habe ich gelesen, dachte aber, dass das weitgehend passt?!?
Es sieht so aus, dass wir mehrere Kursstandorte haben, an denen aber immer nur ganz bestimmte TN sind. Es kann also nicht sein, dass z.B. ein TN, der an Kursstandort 1 ist auch an Kurststandort 3 ist.

SaschaBHH
28.01.2008, 18:38
Also kann ein Teilnehmer nicht mehrere Kurse besuchen?

Bescheiden :D

Josef P.
28.01.2008, 18:42
Ich sah mir nun einmal das Modell aus #19 an.
In welcher Tabelle finde ich den Kurs?
In "Kurs-Details" sind bereits die Teilnehmer eingestellt, oder? (Ich vermute zumindest, dass abHDet_TN_ID eine Teilnehmerkennung darstellen soll.)
Oder sind das alles Einzelkurse? (je Teilnehmer ein Kurs und 1 Dozent? ;))

0815Peter
28.01.2008, 18:47
@Sascha: Nein, ein TN hat eigentlich einen festen Kurs... in der Praxis ist das nicht immer so ;-)
@Josef: Da hab ich schon alles mögliche rumgespielt mit IDs hier und da verknüpfen, wesewegen in den Tabbellen natürlich noch Felder existieren können, die gar keine Bedeutung mehr haben. Umgekehrt natürlich auch, dass in den Tabellen noch Felder fehlen können, die man zur Verknüpfung braucht.

SaschaBHH
28.01.2008, 18:48
Hi,

ein Kurs hat einen Dozenten, einen Pädagogen und mehrer Teilnehmer. Ob nun ein Teilnehmer an mehreren Kurseen teilnehmen kann, habe ich schon gefragt.

Ich habe ein m:n Beziehung im Sinn....

Josef P.
28.01.2008, 18:49
@0815Peter: Eigentlich wollte ich andeuten, dass möglicherweise eine Tabelle fehlt. ;)

SaschaBHH
28.01.2008, 18:54
sehe ich ähnlich, Josef.

Wenn Peter es möchte, werde ich mich Morgen das Thema aufgreifen und ggfs. ein Modell erstellen. Meine Frau denkt schon ich möchte meinen PC oder das MOF heiraten :grins:

Wobei: Peter0815... reines Kopieren macht wenig Sinn, man(n) muss natürlich auch die Sache verstehen.;)

Bis morgen?

0815Peter
28.01.2008, 18:56
@Sascha: das mit diesen m:n-Beziehungen hab ich auch gelesen, aber ich weiß nicht, wie ich diese dann richtig mit meiner TN-Stammdatentabelle verknüpfe. Anbei noch ein Screenshot der Tabellenbeziehungen von "Versuch 23" :-)
@Josef: Da fehlt ganz sicher noch was :-))

Edit: Sorry, aber ich muss jetzt los. Werd mich morgen wieder melden. Danke aber schon mal für die Bemühungen.

0815Peter
29.01.2008, 14:07
Hä, kann man Beiträge nach einer gewissen Zeit nicht mehr editieren? Zumindest fehlt der Button dazu. Dann muss ich jetzt einen neuen Beitrag verwenden, obwohl das jetzt eigentlich nix Neues ist.
Also das mit der Grafik aus dem voherigen Beitrag is vielleicht ein Ansatz, aber wohl eher nicht der richtige. Ich kann so zwar einem TN eine ganz bestimmte Kombination aus Maßnahmestandort und Kurs zuteilen (über die ID der Tabelle, die beide Schlüssel der beiden Tabellen aufnimmt), aber es ist immer noch möglich, dass Kombinationen Zustande kommen, die gar nicht möglich sind, was ja nicht sein soll. Ich denke, dass doch irgendwie eine direkte Beziehung zw. Maßnahmestandort und Kursdetails bestehen muss (Analog zw. Fa und FaAnsprechpartner und BS und BS-Details)... Oder auch nicht? Ich bin sowas von ratlos...

Josef P.
29.01.2008, 15:31
Das Modellieren der Daten kann dir meiner Meinung nach niemand abnehmen.
Trotzdem einmal ein Beispiel (http://access.joposol.com/download/TabBeziehungen_KursBeispiel.png) zum Nachdenken. Bitte nicht als Vorlage verwenden, sondern nur nutzen um über mögliche Beziehungen nachzudenken.

0815Peter
29.01.2008, 16:03
Oh Mann! Ich denke seit 2 Wochen schon über Beziehungen nach. Dick & Doof, Pat & Patachon, Tom & Jerry, alles schön und gut, aber Beziehungen in relationalen Datenbanken is dann doch was anderes... und ich v.a. zu dumm dafür :-)
Ich denke, dass ich wohl ein grundlegendes Verständnisproblem habe. In meiner Vorstellung existiert immer noch eine zentrale Tabelle, die mit anderen in Beziehung steht, die letztlich aber alle Schlüssel aufnimmt und an Hand derer ich dann wieder quasi mir einen großen Datensatz herstellen kann mit allen Infos, die ich in allen verknüpften Tabellen habe, die genau zu diesem einen Datensatz passen, also eindeutig sind. Dabei ist es dann so, dass, wenn (richtige) Beziehungen zwischen Tabellen bestehen, dann auch nur in meiner "Haupttabelle" bestimmte Kombinationen möglich sind (z.B. wenn ein TN an einem best. Standort ist, kann er natürlich nur noch die Kurse an diesem Standort besuchen).
@Josef: Nachdem ich mir dein Beispiel angesehen habe, denke ich, dass ich das eher vergessen kann. Das ganze ist wohl für einen Einsteiger etwas zu komplex. Und hier sind wir erst beim Zusammenstellen des Datenmodells. Ich will nicht wissen, was erst abgeht, wenn ich daran gehe Abfragen, Formulare und Berichte zu basteln, die bestimmte Aufgaben erfüllen sollen :-((

Josef P.
29.01.2008, 16:18
Ich finde, dass das Erstellen des Datenmodells gar nicht so extrem schwer ist. Ich habe oftmals den Eindruck, dass dies viel zu "theoretisch" angegangen wird.
Ok, bei besonderen Regel kann es schon einmal etwas komplexer werden. Für den Erstentwurf orientiere ich mich anfangs gerne an der "Realität"

Ein paar Gedanken, wie ich zu meinem Beispiel aus #39 kam:
1.) Ausgangspunkt: Es sollen Kurse verwaltete werden => "Objekt" Kurs wird erforderlich. Daraus entstand tabKurse
2.) Ein Kurs besteht aus mehreren Teilnehmer => tabKursteilnehmer
3.) falls eine Person bei mehreren unterschiedlichen Kursen teilnimmt, wäre es praktisch, wenn ich den Namen usw. nicht jedesmal erfassen muss => tabPersonen
4.) Je Kurs gibt es einen Dozenten und Pädagogen, die wiederum in mehrere Kurse tätig sein können => tabDozenten, tabPaedagogen ... beide haben mit den Teilnehmern etwas gemeinsam: es sind Personen => Verknüpfung zu tabPersonen, um die Personenstammdaten nicht auf mehrere Tabellen zu verteilen
5.) da ich mir vorstellen kann, dass bestimmte "Themen/Gebiete" regelmäßig wiederholt werden => tabKurskennungen (könnte z.B. genutzt werden um eine Liste von verschiedenen Kursterminen zu einem bestimmten Thema - also nach dieser Kursnummer - zu filtern
6. - ...) usw.

Aber wie du siehst, ich machte mir erstmal keinen einzigen Gedanken bezüglich Normalformen. Und ohne diese jetzt geprüft zu haben haben, würde ich auf eine ganz nette "Normalisierungstiefe" des Erstentwurfes tippen. ;)

Zum Aufbau der Modellierungs-Grundlagen, kann ich dir das AEK-Skript zum Thema Normalisierung von Michael Zimmermann empfehlen. (findest du im AEK-Downloadbereich auf www.donkarl.com)

0815Peter
29.01.2008, 16:49
Und ich geh an die ganze Sache ganz anders ran, weil ich eben nicht so viel Ahnung habe :-) Ich sehe zuerst Teilnehmer, die zu mir kommen oder zu mir geschickt werden. Ich weiß dann, dass sie eine bestimmte Ausbildung bei einer Firma machen und in einer Klasse einer bestimmten Berufsschule sind. Erst dann denke ich an den Kurs, da ich die Kurse an die Teilnehmer anpassen muss. Kommen z.B. 3 neue Teilnehmer, die in keinen der bisherigen Kurse passen, muss ich mir erst einen neuen Dozenten suchen bzw. schauen, wer denn ggf. von den bestehenden Dozenten den Kurs übernehmen kann und dann biete ich eben einen neuen/zusätzlichen Kurs/-termin an.
Ich würde z.B. nie die Daten der Personen in eine gemeinsame Tabelle werfen, das aber auch nur, weil ich mir nicht genau der Möglichkeiten bewusst bin. vom Sozpäd brauch ich eigentlich ja nur den Namen, vom Dozent brauche ich Daten, die ich nicht beim Azubi brauche und umgekehrt.
Naja, ich mache heute Feierabend, ich hab keinen Bock mehr :-) Danke auf jeden Fall für die bisherige Hilfe.

Josef P.
29.01.2008, 16:57
Das sind jetzt genau solche Schilderungen, warum ich anfangs schrieb, dass nur du die Modellierung machen kannst, da aufgrund dieser Anforderungen das Modell entstehen muss.
In meinem Beispiel bin ich von "Standardkursen" ausgegangen und nicht von individuell auf die Teilnehmer abgestimmten Kursen.

Sozpäd brauch ich eigentlich ja nur den Namen, vom Dozent brauche ich Daten, die ich nicht beim Azubi brauche und umgekehrt.
... das wäre mit der von mir gezeigten Struktur möglich:
- in die TAbelle tabPersonen kommen jende Daten die alle gemeinsam haben.
- der Rest wird je "Typ" in die Tabellen tabAuszubildende, tabDozenten und tabPaedagogen verteilt.
in diesem Fall könntest du die bereits vorhandenen Personenstammdaten nutzen, wenn ein Ex-Auszubildender später einmal zum Dozenten wird. ;)

SaschaBHH
29.01.2008, 17:30
Hallo Ihr Strategen,

dat ist ja alles schon am laufen hier, wie schön. :) Dann muss ich ja nichts mehr hinzufügen.

SaschaBHH
29.01.2008, 17:33
upps...

Mag Josef mir mal verraten, womit Du das Laypout der Beziehungen erstellt hast?

Danke;-)

Josef P.
29.01.2008, 17:37
Ich erstellte die Tabellen im SQL-Server-Management-Studio, da ich dort die Tabellen direkt im Beziehungsfenster (nennt sich dort Diagramm) erstellen konnte. Ich finde das angenehmer als in Access - besonders für einen Rohentwurf, bei dem mir die Tabellenfelder eher egal waren. ;)

Zur Sicherheit aber noch eine Wiederholung: mein Beispiel (http://access.joposol.com/download/TabBeziehungen_KursBeispiel.png) ist nur ein Beispiel zum Nachdenken und bestimmt kein Lösungsansatz für 0815Peter.

SaschaBHH
29.01.2008, 17:45
Danke,

ich gebe Dir recht, das Access-Beziehungsfenster kannst Du getrost in die Tonne tretten.

Ich hatte ja - aufgrund Deines Tips - den DBDesigner installiert. Und das gefällt mir sehr gut. Nur kann ich das erstellte Modell nicht mit meiner Access DB synchronisieren, weil irgendwelche SQL Befehle unbekannt sind. Hast Du da noch einen Tip... sonst würde ich nochmal einen Thread eröffnen.

Danke...

0815Peter
29.01.2008, 18:29
Und ich denke, dass ich das Ganze ad acta legen werde, weil ich jetzt schon fast 2 Wochen da dran rumbastel, also so nebenher in der Arbeit und ich jetzt keinen Nerv mehr dafür hab. Ich muss ja meinem eigentlichen Job auch mal wieder nachgehen ;-)
Dennoch danke an alle für die Hilfe.

hcscherzer
29.01.2008, 18:54
... das Ganze ad acta legen ... fast 2 Wochen da dran rumbastel ... keinen Nerv mehr ... meinem eigentlichen Job ...Schade. Es wurde doch gerade erst interessant.
Was ist denn Dein 'eigentlicher Job'?
Und: warum engagierst Du nicht einfach einen Profi?

Josef P.
29.01.2008, 18:54
Ich hatte ja - aufgrund Deines Tips - den DBDesigner installiert. Und das gefällt mir sehr gut. Nur kann ich das erstellte Modell nicht mit meiner Access DB synchronisieren, weil irgendwelche SQL Befehle unbekannt sind. Hast Du da noch einen Tip... sonst würde ich nochmal einen Thread eröffnen.
oder du setz im alten Thread fort. ;)

Ich kenne sonst keine freien Tools. Muss aber gestehen, dass ich noch nicht danach suchte. ;)

Ich probierte gerade das Programm DBDesigner aus. Das Einlesen vorhandener Tabellen klappt. Zum Synchonisieren werden aber anscheinend MySQL-SQL-Anweisungen erzeugt. Notfalls könntest du dir einen "Übersetzer" von MySQL-SQL nach Jet-SQL erstellen. (vielleicht gibt es so etwas bereits)

0815Peter
30.01.2008, 08:50
@hsscherzer: Ja, sicher wäre es auch interessant und ich hätte auch Lust das zu machen und dazuzulernen, aber leider hab ich keine Zeit mehr dafür bzw. nicht die nötige Zeit um mich konzentriert dem Thema zu widmen. Ich mach was im päd. Bereich, was auch der Grund ist warum ICH die DB machen sollte. In diesem Bereich gibt es kein Geld für solche "Extras" :-(

SaschaBHH
31.01.2008, 19:10
Nabend nochmal,

habe doch nochmal eine Frage an Josef.


- in die TAbelle tabPersonen kommen jende Daten die alle gemeinsam haben.
- der Rest wird je "Typ" in die Tabellen tabAuszubildende, tabDozenten und tabPaedagogen verteilt.


1. die Detaildaten tabDozenten etc verbindest Du in einer 1:1 Beziehung zu tabPersonen?
2. Wie realisierst Du in einem solchen Fall die Formular Gestalltung? Mit Unterformularen oder änderst Du den Recordsource das Formulars und blendest die Felder je nach Personenart ein . oder aus?

Interessiert mich, weil ich in meinen Projekt vor ähnlichem stehe.

Josef P.
31.01.2008, 22:11
1. die Detaildaten tabDozenten etc verbindest Du in einer 1:1 Beziehung zu tabPersonen?
Hatte ich im Beispiel nicht, ist aber sinnvoll. Ein Dozent kann nur eine Person sein, wobei eine Person vielleicht gleizeitig Dozent oder Pädagoge sein kann oder zuvor ein Auszuzbildender.
In meinem Beispiel könnte man im Dozenten-DS die Personenkennung ändern. (Dozent würe "neue Identität" ;) bekommen). Da ich vermute, dass dies nicht sein soll, ist dein Vorschlag mit 1:0/1 vermutlich der passendere.
Anm.: 1:0/1 weil: DS in tabPersonen ist erforderlich, in tabDozenten kann einer vorkommen, muss aber nicht.

2. Wie realisierst Du in einem solchen Fall die Formular Gestalltung? Mit Unterformularen oder änderst Du den Recordsource das Formulars und blendest die Felder je nach Personenart ein . oder aus?
In diesem Fall würde ich vermutlich die Personendaten in einem extra Formular bearbeiten und im Bearbeitungsformular der Dozentendaten nur ein schreibgeschützes UF mit den wichtigsten Personenstammdaten anzeigen.

Andererseits könnte ich mir auch vorstellen, dass im Personenformular UF für die Daten der Dozenten, Pädagogen und Auszubildenden in Registerblättern untergebracht werden.

RudiH
01.02.2008, 18:44
Hallo 0815Peter,
so wird das nix. Das ist leider immer das Problem von "Access-Einsteigern". Access suggeriert einem, dass alles recht einfach und mit ein paar Positionierungen von Steuerelementen aufs Formular, noch ein kleines Unter-frm usw. die Arbeit getan ist. Iss leider gar nicht so.

Versuche zuerst einmal die einfachen Grundgerüste deiner DB zu erstellen:
Tab Berufsschule (1--> n) BS-Standorte (können ja mehrere sein)
Tab Dozenten (1--> n) Dozenten-Daten
Tab Teilnehmer (1--> n) TN-Daten (sofern es 1--n-Daten zu erfassen gibt)
Tab Firmen (1--> n) Firmen-Ansprechpartner)
Tab Kurs (1--> n) Kursdaten
D.h. wirlich alle Bereich strukturieren und in 1--n Beziehungen abbilden.
Das ist der wichtigste, aber auch der einfachste Teil.
Erst danach kannst du dir Gedanken machen, wie und wo die einzelnen Bereich in Beziehung stehen. Dafür gibt es Bücher, die man lesen kann, vielleicht auch Kurse, die man besuchen kann. Aber das nutzt einem alles nicht wirklich weiter.

Ich will wirklich nicht eingebildet daher reden, aber so etwas lernt man nur durch Erfahrung. Die ist nur arbeitsintensiv und langwierig zu bekommen. Es gibt auch immer gute und schlechte Lösungen. Wichtig bei dem DB-Design ist leider auch die Erfahrung, die einem lehrt welche Abfragen für diese DB zu erwarten sind. Hat man etwa wichtige Abfrage-Bereiche außer acht gelassen, dann stellt sich eine bis dahin gut funktionierende DB eventuell plötzlich als unbrauchbar heraus und man muss die Tabellenstruktur ändern. Was bei einem vorhandenen Datenbestand schon eine echte Herausforderung sein kann.

Also nicht einfach nur mal eben ein paar Beziehungen gebildet und dann die Daten erfasst. Zuerst bitte strukturieren und nachdenken. Eine Lösung für dein Problem wirst du hier so nicht erhalten, weil es deine eigene Arbeit ist. Es wird sich wohl keiner finden, der dir das ab nimmt. Villeicht im Detail, ob ein bestimmte Bereich ok ist.

Tut mir Leid, dass es keine einfache Antwort hierfür gibt.

RudiH