php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.09.2011, 20:24  
Benutzer
 
Registriert seit: 01.07.2007
Beiträge: 47
PHP-Kenntnisse:
Fortgeschritten
ecomeback
Standard Datenbankdesign

Hallo liebe PHP-Freunde,

derzeit stellt mich der Entwurf eines Datenbankkonzepts vor ein echtes Problem, dass ich in dieser Weise noch nie hatte. Es gibt bestimmt geeignte Lösungen, die sich auch mit einer MySQL Datenbank umsetzen lassen, allerdings führen viele meiner Ansätze zu merkwürdigen Konstrukten.

Das Problem/die Aufgabe:
Es geht darum eine Art Schülerverwaltung umzusetzen. Bekanntlich sind die Schüler jedes Schuljahr in einer neuen Klasse - zumindest die meisten von ihnen. Es soll innerhalb der Applikation möglich sein zwischen den Schuljahren zu wechseln, also unterschiedliche Zuordnungen zwischen Schülern und Klassen darzustellen. Es soll also auch ein Rückblick möglich sein. Dabei fallen immer wieder Datensätze an, die zu einem Schüler und gleichzeitig in ein bestimmtes Schuljahr gehören. Viele Beziehungen sind demnach also anhängig vom Schuljahr, was die Sache aus meiner Sicht nicht gerade vorteilhaft macht.

Folgende angedeutete Lösung käme ggf. in Frage, aber ob wirklich sinnvoll?

Tabelle Schüler, sid eindeutige Referenz
Tabelle Schuljahre, yid eindeutige Referenz

Relationstabelle Schüler_Schuljahr
id | sid | yid

Nun gibt es eine Beziehung zwischen den Schüler und den Schuljahren, die Referenzid aus der Schüler_Schuljahr kann nun dazu benutzt werden Daten wie die Klassenzugehörigkeit der Schüler in einer weiteren Tabelle abzubilden. Das hat den Vorteil, dass die Schüler nur einmalig angelegt werden müssen. Auch andere Inhalte können diese Referenz nutzen und Inhalte eindeutig einem Schuljahr und einem Schüler zuordnen.

Überzeugt bin ich von dieser Lösung nicht.

Ich hoffe, dass ich mein Problem ausreichend gut darstellen konnte. Es muss Lösungen für dieses Problem geben. Vielleicht gibt es auch mehrere, für die es jeweils Vor- und Nachteile gibt. Ggf. habt ihr auch ein Stichwort, wie sich dieses Designproblem fachsprachlich fassen lässt, so dass ich mich tiefergehend informieren kann.

Viele Grüße
ec

Geändert von ecomeback (30.09.2011 um 20:42 Uhr).
ecomeback ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 30.09.2011, 21:07  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Letztlich läuft das darauf hinaus, wie die Daten gepflegt werden. Einen Selbstläufer wird man wohl nicht hinbekommen. Da die Einschulung eine feste Größe ist und Sitzenbleiben und Schulwechsel sicher mit zu breücksichten sind, bleibt letztlich nur, am Ende des Schuljahres für alle Schüler die Klassenstufe neu zu vergeben. Davon ausgehend sähe ein Modell vielleicht so aus:

Code:
Schueler
ID | Name | foo | bar | Einschulung

rel_Klasse_Schueler
SchuelerID | KlasseID

Klasse
ID | Jahr | Klassenstufe | KlasseErgänzung
Bsp.

Code:
Schueler
1 | Karl   | Koch   | … | 2000
2 | Regine | Müller | … | 2000

rel_Klasse_Schueler
1 | 55
2 | 55 // war in der selben Klasse wie Karl
1 | 77 // Sitzengeblieben
2 | 78

Klasse
55 | 2006 | 7 | a
77 | 2007 | 7 | a
78 | 2007 | 8 | a
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 01.10.2011, 09:01  
Erfahrener Benutzer
 
Registriert seit: 28.06.2009
Beiträge: 109
PHP-Kenntnisse:
Fortgeschritten
eisenhans befindet sich auf einem aufstrebenden Ast
Standard

Es soll sogar Schüler geben,die innerhalb eines Jahres die Klasse wechseln ...

Hast Du die auch in deinem Modell ?

Ich würde für die Fälle im Modell von Nikosch die Relation um das Datum erweitern:

Code:
rel_Klasse_Schueler
===============
1 | 55 | 01.08.2006
2 | 55 | 01.08.2006 // war in der selben Klasse wie Karl
1 | 77 | 01.08.2007 // Sitzengeblieben
2 | 78 | 01.08.2007
So kannst Du über das letzte Datum der Relation die aktuelle Klasse bekommen
__________________
Webstammtisch Oldenburg
eisenhans ist offline   Mit Zitat antworten
Alt 01.10.2011, 12:12  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

@eisenhans: in einem OO-Datenmodell würdest du das üblicherweise mit historisierten Beziehungen realisieren. Will heißen: eine Beziehung für die aktuelle Zugehörigkeit und eine für die "historische" Zugehörigkeit. Letztere kann mehrmals vorkommen, erstere nur einmal. Damit tust du dir bei der Abfrage leichter und die Selektivität bei Abfrage der aktuellen Schüler auf der Beziehungs-Tabelle ist größer!

@ecomeback: wichtig ist hier vor allem die Konfiguration der JOIN-Indizes auf der Beziehungs-Tabelle. Diese müssen in der Reihenfolge der JOINs definiert sein, sonst kann diesen MySQL nicht verarbeiten. Der GORM des APF legt daher einen JOIN- und einen Reverse-JOIN-Index an, damit die n:m Beziehung in beide Richtungen abfragbar ist.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 04.10.2011, 11:26  
Erfahrener Benutzer
 
Registriert seit: 01.06.2011
Beiträge: 392
PHP-Kenntnisse:
Anfänger
achtelpetit befindet sich auf einem aufstrebenden Ast
Standard

Wenn man vernünftigerweise voraussetzt, daß ein Schüler auch innerhalb eines Schuljahres die Klasse wechseln kann, dann müssen in "rel_Klasse_Schueler"
2 Spalten ergänzt werden: "Eintritt_in_die_Klasse" und "Austritt_aus_der_Klasse".

Da die meisten Schüler ja geschlossen von einer Klasse in eine andere wechseln, brauchst Du nur eine entsprechend formulierte Anfügeabfrage, um alle Schüler der 7a in die 8a zu versetzen. Die (hoffentlich) wenigen Sitzenbleiber müssen natürlich zu Fuß korrigiert werden.
achtelpetit ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Datenbankdesign / Normalisierung taurus Datenbanken 1 07.02.2011 10:53
Benutzerrechteverwaltung / Datenbankdesign Adam S Datenbanken 5 01.11.2010 10:37
Datenbankdesign für Reisen 22hase Datenbanken 16 17.09.2010 18:39
Datenbankdesign wernersbacher Datenbanken 3 10.07.2010 16:06
[Erledigt] Effizientes Datenbankdesign Yanko Datenbanken 6 04.07.2010 14:58
datenbankdesign - server .csv abfragen, werte speichern taurus Datenbanken 42 09.05.2010 17:44
Datenbankdesign für Keywords monk Datenbanken 2 19.01.2010 21:03
Datenbankdesign Screeny Datenbanken 13 29.10.2009 01:50
Datenbankdesign für Onlineshop jonSchmidt Datenbanken 1 24.07.2009 18:41
[Erledigt] Komplexer SELECT (in relationalem Datenbankdesign) + Literaturempfehlung lordnikonkg Datenbanken 4 29.04.2009 23:10
[Erledigt] Datenbankdesign: "Freundschaftsnetzwerk" phyton Software-Design 15 04.10.2008 13:28
Datenbankdesign mit wiederholung shocky Datenbanken 2 15.01.2007 15:37
Datenbankdesign: Reloaded c-f-g Datenbanken 7 29.07.2006 17:24
[Erledigt] [SQL] Datenbankdesign Datenbanken 5 12.04.2005 08:30
Datenbankdesign für Shop mit unterschiedlichen "Typen&a PHP Tipps 2005 27 20.01.2005 16:06


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:39 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum