pel Geschrieben 5. August 2008 Teilen Geschrieben 5. August 2008 Hallo, was haltet Ihr von dieser Datenbankstruktur? Bitte um Kritik was man besser machen könnte! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 5. August 2008 Teilen Geschrieben 5. August 2008 Also vom Text her wärs ok, leider hast das aber nicht so umgesetzt. Laut deinem Modell hätte z.B. ein Fach genau eine Klausur. Bei den anderen ist es ähnlich. Du musst die Beziehung genau umgekehrt abbilden. In die Klausurentabelle gehört ein Verweis auf das Fach. Analog verhält es sich bei den anderen Beziehungen. Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pel Geschrieben 5. August 2008 Autor Teilen Geschrieben 5. August 2008 Also vom Text her wärs ok, leider hast das aber nicht so umgesetzt. Dim yo hast recht da hab ich geschlafen bzw. alles falsch rumgemacht siehst du sonst noch unstimmigkeiten? Ist ja keine große DB... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 6. August 2008 Teilen Geschrieben 6. August 2008 siehst du sonst noch unstimmigkeiten? Ja. Fach und schüler ist eine n:m Zuordnung. Ein Schüler kann mehrere Fächer haben und ein Fach wird von mehreren Schülern besucht. Daher brauchst Du eine Auflösungstabelle. Ausserdem fehlt mir noch der Leher ;-) Habs jetzt aber nur mal überflogen. Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pel Geschrieben 6. August 2008 Autor Teilen Geschrieben 6. August 2008 Ja. Fach und schüler ist eine n:m Zuordnung. Ein Schüler kann mehrere Fächer haben und ein Fach wird von mehreren Schülern besucht. das dachte ich mir auch schon, nur du liest die Beziehungen anders wie ich , daher fand ich meine Beziehung etwas komisch... : Ein Schüler kann mehrere Fächer haben und mehrere Fächer werden von vielen Schülern besucht. <-- Dies verwirrte mich... So habe es mal umgeschrieben und die M:N Beziehung aufgelöst. Dann gibt es noch das Problem mit dem Vorfall , welcher vorher eine 1:N Beziehungen war, doch dann dachte ich nochmals drüber nach und eigentlich ist es auch eine M:N Beziehung. Siehe Bild was ich dort schrieb, was denkst du? Habs jetzt aber nur mal überflogen.Dafür sollte ich mich bei der Ärztekammer beschweren Das Programm ist für meine Freundin(noch Referendar...) daher fällt der Lehrer hier untern Tisch Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 6. August 2008 Teilen Geschrieben 6. August 2008 Dafür sollte ich mich bei der Ärztekammer beschweren Pff. Ihr Kassenpatienten könnt mir garnix :bimei - In der Tabelle Fach ist immer noch eine Schüler Id - Eine Auflösungstabelle hat einen eigene technischen PK und zwei Felder die dann, in Deinem Fall, ein Fach mit einem Schüler verbinden, keinen zusammengesetzten PK der diese Aufgabe übernimmt. - Unterrichtsstunde und Unterrichtstag würd ich in einer Tabelle abspeichern. Man muss es nicht übertreiben ;-) Allerdings würd mich interessieren welchen Mehrwert an informtion du dadurch erhalten willst, denn es fehlt eine Verbindung zu einem Fach. Ein Stundenplan ist so nicht möglich. Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pel Geschrieben 6. August 2008 Autor Teilen Geschrieben 6. August 2008 Pff. Ihr Kassenpatienten könnt mir garnix :bimei hm... abwarten das könnte sich noch ändern hier - In der Tabelle Fach ist immer noch eine Schüler Id yo und es scheint als hat sich in meinem Buch(Frank Geisler , Datenbanken 2.Auflage) ein Fehler eingeschlichen... Kann es sein wenn du dir dieses Bild anschaust(ist ein Beispiel aus obigem Buch), dass der BERATER_ID FK ganz rechts überflüssig ist?? Er ergibt zumindest für mich keinen Sinn wenn ja, dann ist die SCHUELER_ID natürlich auch quark! - Eine Auflösungstabelle hat einen eigene technischen PK und zwei Felder die dann, in Deinem Fall, ein Fach mit einem Schüler verbinden, keinen zusammengesetzten PK der diese Aufgabe übernimmt. habs mal verbessert: das mit dem zusammengesetzten PK war quark - Unterrichtsstunde und Unterrichtstag würd ich in einer Tabelle abspeichern. Man muss es nicht übertreiben ;-) Beide Tabellen in eine Tabelle macht man ja nur wenn es eine 1:1 Beziehung wäre, ist hier ja aber nicht der Fall. 1 U.TAG hat N U.STD d.h. ein U.TAG verweist auf mehrere Unterrichtseinheiten die individuelle Inhalte und Hausaufgaben haben. Würde ich dies zu einer Tabelle zusammenfügen, so hätte solche Einträge in der Tabelle UNTERRICHT: DATUM_ID TAGESDATUM STUNDENNR INHALT HAUSAUFGABE1............. 12.10.2008 ...... 1................bla.............bla2............. 12.10.2008 ...... 2................test ...........test3............. 12.10.2008 ...... 3................bla............... bla das TAGESDATUM ist doch sehr redundant daher fände ich die Aufteilung auf 2 Tabellen ok. Allerdings würd mich interessieren welchen Mehrwert an informtion du dadurch erhalten willst, denn es fehlt eine Verbindung zu einem Fach. Ein Stundenplan ist so nicht möglich. HM... so ists wenn man sich zu sehr an bestehenden englischen Alternativprogrammen orientiert und deren Designfähler übernimmt Das Fach ist eigentlich unwichtig bei dem Unterrichtstagesplaner, den die Bezeichnung für das Fach befindet isch in dem Klassennamen z.B. E7b heißt Englisch Klasse 7b. Natürlich könnte man noch eine Spalte Fach einfügen neben die Spalte Klasse. Doch wie würdest du da einen Beziehung herstellen? 1 U.STD hat 1 FACH ? also der Tabelle UNTERRICHtSSTUNDE das Feld "Fachname" hinzufügen? Das klingt ok ^^ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 7. August 2008 Teilen Geschrieben 7. August 2008 Er ergibt zumindest für mich keinen Sinn wenn ja, dann ist die SCHUELER_ID natürlich auch quark! Für mich auch nicht. Es sei denn, dort wird redudant der bevorzugte Berater abgespeichert (falls es sowas gibt). Das nennt sich Denormalisierung, aber der von mir geschilderte Fall müsste natürlich auch im Buch so erklärt sein. Ansonsten macht es keinen Sinn. das TAGESDATUM ist doch sehr redundant daher fände ich die Aufteilung auf 2 Tabellen ok. Grundsätzlich hast Du natürlich recht. Allerdings gehört zu jedem Datenbankentwurf auch die schon angesprochene Denormalisierung, bei der man sich überlegt, welche Entitäten man sinnvollerweise zusammenlegen kann. Das hat folgende Gründe: - Vereinfachung des Datenmodells - Vereinfachung der SQLs und des Applicationsdesigns - Erhöhung der Performance - Reduzierte Kosten wegen obiger Punkte. In einem normalen Projekt kannst pro Entität mal als Faustregel 25-30 Tsd Euro rechnen. Man darf es natürlich nicht übertreiben, aber ein etwas umfangreicheres Datenmodell das sich in der 3 (oder sogar 4,5 NF) befindet ist in der Praxis praktisch nicht benutzbar. Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Enno Geschrieben 7. August 2008 Teilen Geschrieben 7. August 2008 was mir grade aufgefallen ist. du speicherst in der Tabelle Klausur die Note mit. Das bringt nichts. Für wen ist die Note? Oder willst du für jeden Schüler einen eigenen eintrag in der Klausur anlegen? Also auch mit Zwischentabelle arbeiten, die die Klausuren und die Schüler zusammenbringt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pel Geschrieben 7. August 2008 Autor Teilen Geschrieben 7. August 2008 Grundsätzlich hast Du natürlich recht. Allerdings gehört zu jedem Datenbankentwurf auch die schon angesprochene Denormalisierung, bei der man sich überlegt, welche Entitäten man sinnvollerweise zusammenlegen kann. Das hat folgende Gründe: - Vereinfachung des Datenmodells - Vereinfachung der SQLs und des Applicationsdesigns - Erhöhung der Performance - Reduzierte Kosten wegen obiger Punkte. In einem normalen Projekt kannst pro Entität mal als Faustregel 25-30 Tsd Euro rechnen. Man darf es natürlich nicht übertreiben, aber ein etwas umfangreicheres Datenmodell das sich in der 3 (oder sogar 4,5 NF) befindet ist in der Praxis praktisch nicht benutzbar. Yo mittlerweile kenne ich Denormalisierung/Normalisierung und dass die beiden sich die Waage halten sollten... schnelle bzw. effekte sql statements mit möglichst wenig joins sind das Ziel bei gleichzeit kontrollierter Redundanz :bimei Enno: was mir grade aufgefallen ist. du speicherst in der Tabelle Klausur die Note mit. Das bringt nichts. Für wen ist die Note? Oder willst du für jeden Schüler einen eigenen eintrag in der Klausur anlegen? Also auch mit Zwischentabelle arbeiten, die die Klausuren und die Schüler zusammenbringt. yo 1 KLause hat 1 Note also kommt das in eine Tabelle. Die Note ist für die Klausur. 1 Schüler hat N Klausuren / 1 Klausur gehört zu 1 Schüler = 1:N Beziehung. Warum brauche ich da eine Zwischen-/Auflösungtabelle? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Enno Geschrieben 7. August 2008 Teilen Geschrieben 7. August 2008 Nö. An 1 Klausur nehmen doch X Schüler teil. Oder irre ich mich? Du willst also wenn 20 Schüler in der Klasse sitzen, für eine Klausur 20 Einträge in der Tabelle machen? 1 Schüler hat Y Noten in Y Klausuren 1 Klausur hat X Schüler als Teilnehmer. Ich denke das kann man am besten über eine Zwischentabelle abbilden. Notentabelle KlausurID SchülerID Note Datum Ach Datum da drin. Damit kannst du dann auch die Nachschreibenote unterscheiden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pel Geschrieben 8. August 2008 Autor Teilen Geschrieben 8. August 2008 Nö. An 1 Klausur nehmen doch X Schüler teil. Oder irre ich mich? teilnehmen ist ja ein anderes Verb bzw. Ausdrucksweise... mit Klausur meine ich die Klassenarbeit(papierstück) selbst. 1 Schueler hat N Klausuren und jede Klausur hat 1 Note als Feld ist doch ok? Du willst also wenn 20 Schüler in der Klasse sitzen, für eine Klausur 20 Einträge in der Tabelle machen? 1 Schüler hat Y Noten in Y Klausuren 1 Klausur hat X Schüler als Teilnehmer. mit Y fange ich datenbanktechnisch nichts an 1 Schüler hat N Klausuren mit dem Feld Note. 1 Klausur wird von genau einem Schüler geschrieben. Ach Datum da drin. Damit kannst du dann auch die Nachschreibenote unterscheiden. Note ist Note egal wann die geschrieben wurde. Da wird nicht unterschieden warum auch. 1 Schüler hat N Vorfälle, aber hat 1 Vorfall N Schüler? Das kommt drauf an wie man das ganze sieht finde ich. Wenn ich nur den Schüler in der DB haben will der z.B. das Opfen/Täter ist kann ich die anderen Beteiligten Namen in einen Bemerkungfeld schreiben. So würde 1 Vorfall hat 1 Schüler passen. Oder ich schreibe für 3 Schüler die beteiligt sind am Vorfall je einen Datensatz mit der gleich Vorfall ID eben was aber zuviel Aufwand ist. daher bevorzuge ich andere erstere Methode. Was meint Ihr - Herr Dotore? :floet: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 8. August 2008 Teilen Geschrieben 8. August 2008 mit Klausur meine ich die Klassenarbeit(papierstück) selbst. Das ist die falsche Sichtweise. In einer Entität werden keine Kopien verwaltet. Du schreibst ja ein und den selben Schüler auch nicht X mal in die Schülertabelle weil er X Fächer hat. Das machst Du aber mit den Klausuren. 1 Schueler hat N Klausuren und jede Klausur hat 1 Note als Feld ist doch ok? Eine Klausur wird von X Schülern geschrieben und hat dementsprechend X Ergebnisse. Du speicherst nicht für jeden schüler nochmal den gleichen datensatz in der tabelle. das wäre redundanz die wir vermeiden wollen. Auch bei einer Denormalisierung würd ich das nicht machen. Bedeutet: Enno hat recht und Du brauchst eine Auflösungstabelle z.B. Klausurergebnis Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pel Geschrieben 10. August 2008 Autor Teilen Geschrieben 10. August 2008 Bedeutet: Enno hat recht und Du brauchst eine Auflösungstabelle z.B. Klausurergebnis ok ich hab nochmals alles Überflogen und alle Eure Vorschläge eingebaut, ja auch Erno`s Datum Vorschlag mit Nachklausur-Datum... denke es schadet net und für einen vergesslichen Lehrer kann das ganz nützlich sein Fällt euch sonst noch was auf oder Verbesserungsvorschläge? Wie sagte mein Lehrer:"90% des Programmes macht das Datenbank-Design aus". Naja etwas übertrieben, scheint der hat noch nie programmiert Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pel Geschrieben 10. August 2008 Autor Teilen Geschrieben 10. August 2008 Könnt Ihr mir noch sagen, wass der PrimaryKey in der Auflösungstabelle für eine Bedeutung hat? Denn ich habe in keiner meiner Auflösungstabellen einen PK! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Enno Geschrieben 11. August 2008 Teilen Geschrieben 11. August 2008 In der Tabelle Fach ist die Schüler_ID zuviel drin. Du löst ja die Beziehung Fach <-> Schüler über die Zwischentabelle Schueler_Fach auf. Gruß Enno Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 11. August 2008 Teilen Geschrieben 11. August 2008 Könnt Ihr mir noch sagen, wass der PrimaryKey in der Auflösungstabelle für eine Bedeutung hat? In einem guten Datenmodell sollte jede Tabelle einen PK haben. Zum einen ist das die Voraussetzung für ein normalisiertes ER-Modell (ohne PK kann man bei einer Tabelle nie von irgend einer Art von Normalisierung sprechen) und zum anderen kann man damit technisch eindeutig einen Datensatz identifizieren. Also nimm ihn auch bei dir mit rein auch wenn du vielleicht momentan oder in dieser AW keinen direkten Nutzen davon hast. Wie sagte mein Lehrer:"90% des Programmes macht das Datenbank-Design aus". Naja etwas übertrieben, scheint der hat noch nie programmiert Er meinte wohl damit die Fähigkeiten die eine AW haben kann hängen zu 90% von dem ab was das Datenmodell liefert. Und damit hat er absolut recht. Applicationen kommen und gehen im laufe der zeit, die Daten bleiben. Und darum ist ein gutes DB Modell deutlich wichtiger als das ganze architektonische J2EE, .Net was auch immer Geplänkel drum herum. Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pel Geschrieben 11. August 2008 Autor Teilen Geschrieben 11. August 2008 In einem guten Datenmodell sollte jede Tabelle einen PK haben. Zum einen ist das die Voraussetzung für ein normalisiertes ER-Modell (ohne PK kann man bei einer Tabelle nie von irgend einer Art von Normalisierung sprechen) und zum anderen kann man damit technisch eindeutig einen Datensatz identifizieren. PK auch in einer Auflösungstabelle?? Mich wundert es nur, da dies in meinem DB-buch so nicht gezeigt wird... aber in dem einen bild siehe oben wirds so gezeigt,da hast recht. OK PK für jede TAbelle eingeplant bzw. LinQ afair erlaubt eh keine Tabellen ohne PK hehe von daher... In der Tabelle Fach ist die Schüler_ID zuviel drin. Du löst ja die Beziehung Fach <-> Schüler über die Zwischentabelle Schueler_Fach auf. oh man ja das liegt an dem blöden tabellenkalk. programm mit dem ich das DB design mache , mal schauen was ob die neuen SQL 2008 server express/compact(free) Versionen bieten hinsichtlich Datenbank Design und Entitäten Visualisierung. Dann präsentier ich hier noch die letzte final version schön übersichtlich danke euch allen wieder was gelernt :e@sy Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SoL_Psycho Geschrieben 13. August 2008 Teilen Geschrieben 13. August 2008 Sonst besorg dir doch einfach Visio... Einfach, effizient, praktisch Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pel Geschrieben 20. November 2008 Autor Teilen Geschrieben 20. November 2008 Sonst besorg dir doch einfach Visio... Einfach, effizient, praktisch zu teuer für das was ich brauche... so habe mal wieder etwas Zeit an dem Projekt weiter zu arbeiten wie versprochen nach langer Zeit das Diagramm Bilder siehe Anhang. Das andere Bild sprich die farbige Tabelle soll die Grafische Oberfläche bzw. den Unterrichtsplan darstellen in meinem Programm. Wenn ich ein Datum vor oder zurück springe via button_click werden alle Datensätze zu einem Datum geladen. Daher habe ich damals eingeführt: 1 Unterrichtstag hat N Unterrichtsstunden. Unterrichtstag: date datum; Unterrichtsstunde: unterrichtsstunde_id klasse fach activity homework Meine Frage ist jetzt wie verbinde ich jetzt die Tabellen Unterrichtstag und Unterrichtsstunde mit den Tabellen Schulklasse + Fach und den beiden Feldern activity+homework? Vielleicht ist ja jemand so nett und hilft mir bitte dabei das ganze etwas aufzudröseln? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pel Geschrieben 20. November 2008 Autor Teilen Geschrieben 20. November 2008 komisch dass ich nicht editieren kann... Würdet Ihr die Tabellen Schueler, Schulklasse, Fach als ternäre Beziehung beschreiben? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Enno Geschrieben 21. November 2008 Teilen Geschrieben 21. November 2008 (bearbeitet) Da fehlt die Beziehung Schüler - Note. was macht in der Tabelle Vorfall der Name? Soll das der Name des meldenden Lehrer sein? Was ist hier wenn 1 Vorfall mehrere Schüler betrifft? auch mehrmals eintragen? Also wieder Auflösungstabelle. Bearbeitet 21. November 2008 von Enno Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pel Geschrieben 21. November 2008 Autor Teilen Geschrieben 21. November 2008 Da fehlt die Beziehung Schüler - Note. was macht in der Tabelle Vorfall der Name? Soll das der Name des meldenden Lehrer sein? huch dämliches maestro, der visual designer ist buggy in einem anderen diagramm stimmts: Das ist der Vorname + Nachname des Schülers + die Schulklasse die man in der GUI auswählen kann. Danach wird alles in eine Tabelle eingefügt und als VORFALL angezeigt. Diese Tabelle ist eine Liste für alle Vorfälle bei der man nach Klassenspalte bzw. vorname/nachname spalte sortieren kann. Was ist hier wenn 1 Vorfall mehrere Schüler betrifft? auch mehrmals eintragen? Also wieder Auflösungstabelle. hm eigentlich reichte mir die 1:N dann wird die Akte zum Hauptäter hinzugefügt und die anderen Namen von Hand... yo hast recht das ist doch frickelei also nochmals hier verbessert: Was mich am meisten interressiert ist wie ich diese Beziehung lösen kann: 1 Unterrichtstag hat N Unterrichtsstunden. Angezeigt werden je Zeile 1 :Klasse : Fach : Aktivität : Hauseaufgaben 2 ... Klasse und Fach bestehen bereits nur ohne Beziehung und dann müsste man das ganze mit dem Unterrichtstag + Unterrichtsstunde verknüpfen (1:N) fällt dir dazu was weises ein wie sonst auch? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pel Geschrieben 21. November 2008 Autor Teilen Geschrieben 21. November 2008 ok ich habs mal so probiert, was hälst du davon? wichtig ist die rote Seite: Ich habe eine N:M Beziehung zwischen Schulklasse + Fach erstellt mit den 2 Attributen Inhalt + Hausaufgabe damit jede Schulklasse + Fach-Kombination individuelle Inhalte+Hausaufgaben haben kann. Und dazu noch eine 1:N Beziehung sprich 1 Unterrichtstag hat eine eindeutige Schulklase+Fach-Kombination mit individuellem Inhalt+Hausaufgaben. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pel Geschrieben 22. November 2008 Autor Teilen Geschrieben 22. November 2008 (bearbeitet) so bin jetzt nochmals in mich gegangen, habe das GUI-Front-End aus meinem Kopf verdrängt, da es doch zu dominierend war und störte. Ich denke so dürfte die Information mittles select + join Abfragbar sein: Datum Stunde Klasse Fach Inhalt Hausaufgabe15.10.2008 1 10b Mathe bla1 bla215.10.2008 2 10b English bla3 bla415.10.2008 3 10b Mathe bla5 bla6 Was meint Ihr zu unterem Bild? Bearbeitet 22. November 2008 von pel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.