Datenbankkonzept

hi Community,

heute strapazier ich die Community…
meine Vermutung: ich habe einen Fehler im Konzept.

Ich habe mehrere tables… und die sollen abhaengig voneinander sein.
im klartext…es geht um einen stundenplan.

der stundenplan hat tage und faecher.
also… table faecher, table timetable, table teacher
so… nun hat jedes fach eine id, jeder lehrer eine id…
ich moechte dass der stundenplan dann klassisch angezeigt wird.

unter motag sollte dann stehen zbsp:

ENGLISCH (frau teller)
DEUTSCH (herr besteck)

usw.

wie mache ich das am geschicktesten??
oder ist mein datenbankmodell eh gruetze?

grusz

PixelKoenig

hmmm
also Grundliegend würde ich sagen macht eine Aufspaltung der Lehrer und Fächer-Tabelle nur dann Sinn, wenn die Lehrer teilweise tauschen
also etwa
Montag Deutsch (Fr. Montag)
Dienstag Deutsch (Hr. Dienstag)
wobei man selbst das durch einen Doppeleintrag von Deutsch realisieren könnte.
Kurzum: Dein Konzept ist flexibler, aber eben auch umständlicher.

der stundenplan hat tage und faecher.
also… table faecher, table timetable, table teacher
so… nun hat jedes fach eine id, jeder lehrer eine id…
ich moechte dass der stundenplan dann klassisch angezeigt
wird.

wäre vllt sinnvoll wenn Du erklärst, was da genau drin stehen soll - vor allem für den timetable ist das interessant. Sollte im idealfall etwa so aussehen
id
tag
zeit
dauer bzw endzeit
ref_id_teacher
ref_id_fach

wie mache ich das am geschicktesten??

das kommt eben auf Deine Struktur an.
Grundsätzlich aber halt ein Gerüst bauen, das Dir die Tage in einzelnen Tabellen oder Spalten aufbaut und dann jeweils mit der ref_id die Daten aus den anderen Tabellen holen.
Unter Umständen macht es aber mehr Sinn sich die kompletten Datenbankinhalte der Fächer und Lehrer-Tabellen zu holen und diese in Arrays zu speichern. Dann bräuchtest Du in die Funktion nur immer das array mit der ref_id_xxxx als index ausgeben zu lassen…

ich persönlich würde es wohl so machen
(Grob überrissen)
$function erstellelehrerarray()
return $array;

function zeigetagan($tag)
select where tag=$tag order by time ASC
return

function ausgabe()
echo
echo zeigetagan(„Montag“);
echo
echo zeigetagan(„Dienstag“);

Hoffe das hilft Dir weiter

hi,

also Grundliegend würde ich sagen macht eine Aufspaltung der
Lehrer und Fächer-Tabelle nur dann Sinn, wenn die Lehrer
teilweise tauschen
Kurzum: Dein Konzept ist flexibler, aber eben auch
umständlicher.

nun. man bedenke, dass ein lehrer auch mehrere faecher unterrichten kann (Frau aetschibaetch,deutsch,mathe) benoetige ich eigentlich schon ne eigene tabelle. erschwerend kommt hinzu, dass ich die persoenlichen daten des lehrers auch halten moechte. also, telefonnummer und dergleichen. das script ist eine datenbank fuer eltern, damit sie sehen koennen, wer wie erreichbar ist. darin enthalten sind alle schueler der klasse und deren stundenplan. soll halt einfach uebersichtlich fuer eltern sein, sodass sie, wenn sie mal schnell ne nummer eines klassenkameraden brauchen einfach ins web gehen koennen. ebenso, wie der aktuelle stundenplan ist.

wäre vllt sinnvoll wenn Du erklärst, was da genau drin stehen
soll - vor allem für den timetable ist das interessant. Sollte
im idealfall etwa so aussehen
id
tag
zeit
dauer bzw endzeit
ref_id_teacher
ref_id_fach

genauso hatte ich mir das auch gedacht.

[…]

Funktion nur immer das array mit der ref_id_xxxx als index
ausgeben zu lassen…

das mit dem array habe ich mir auch schon gedacht. es wird u.U. ja recht komplex.

ich moechte im stundenplan naemlich folgendes machen:

[Zeit] [MO] [DI] [MI]
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
8-8.50 Deutsch Mathe Kunst
 (fr. A) (hr. F) (fr A.)
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
8.50-9.45 Mathe Mathe Deustch
 (Hr. F) (hr. F) (fr. A)

der klu dabei… die namen der lehrer sollen klickable sein…
und dann zur lehrertabelle fuehren. der entsprechende lehrer ist dann
ge-hilight-ed…

wenn ein lehrer mehrere faecher unterrichtet… wie in meinem falle die deutschlehrerin… dann ist das schon komplexer

ich persönlich würde es wohl so machen
(Grob überrissen)
$function erstellelehrerarray()

[…]

da muss ich mich dann erstmal reindenken.
die auflistung der lehrer und schuler habe ich ja schon.

ich weiss nur nicht, wie ich die faehcer und die lehrer optimal ins verhaeltnis bringe.

mache ich einen table teachers der die felder

ID | name | Deutsch | Mathe | Kunst | .... 
1 | Fr. A| 1 | 0 | 1 |
2 | Hr. G| 0 | 1 | 0 |

beinhaltet…
oder eher :

Table Teachers
ID | name | Fach 
1 | Fr. A| 1,3
2 | Hr. G| 2

Table subjects
ID | subject
1 | Deutsch
2 | Mathe
3 | Kunst

letzteres hat dann wohl den vorteil, dass wenn ein fach hinzukommt ich einfach nur die faecher tabelle anpassen muss…und nicht die lehrertabelle… allerdings muss ich doch dann ne menge daten in einem array halten-.-- also waehrend der laufzeit… strapaziert das nicht den server? also…wird das script dadurch nicht langsamer, wenn da mehrere drauf zugreifen?

ich will das ganze fuer mehrere klassen innerhalb einer schule entwerfen…

Hoffe das hilft Dir weiter

auf alle faelle schon mal ein guter denkanstoss.
bin gespannt auf deine antworten meiner folgefragen.
merci

PixelKoenig

mal sehn

nun. man bedenke, dass ein lehrer auch mehrere faecher
unterrichten kann (Frau aetschibaetch,deutsch,mathe) benoetige
ich eigentlich schon ne eigene tabelle. erschwerend kommt
hinzu, dass ich die persoenlichen daten des lehrers auch
halten moechte. also, telefonnummer und dergleichen. das
script ist eine datenbank fuer eltern, damit sie sehen
koennen, wer wie erreichbar ist. darin enthalten sind alle
schueler der klasse und deren stundenplan. soll halt einfach
uebersichtlich fuer eltern sein, sodass sie, wenn sie mal
schnell ne nummer eines klassenkameraden brauchen einfach ins
web gehen koennen. ebenso, wie der aktuelle stundenplan ist.

dann macht eine aufsplittung unbedingt Sinn

[…]

Funktion nur immer das array mit der ref_id_xxxx als index
ausgeben zu lassen…

das mit dem array habe ich mir auch schon gedacht. es wird
u.U. ja recht komplex.

nicht unbedingt… Du musst aber dann drauf achten das array selbst zu speichern, damit Du Deine indices auch so drin hast wie sie sein müssen.

ich moechte im stundenplan naemlich folgendes machen:

[Zeit] [MO] [DI] [MI]
________________________________________
8-8.50 Deutsch Mathe Kunst
(fr. A) (hr. F) (fr A.)
______________________________________
8.50-9.45 Mathe Mathe Deustch
(Hr. F) (hr. F) (fr. A)

der klu dabei… die namen der lehrer sollen klickable sein…
und dann zur lehrertabelle fuehren. der entsprechende lehrer
ist dann
ge-hilight-ed…

sollte jetzt nicht so das Problem sein…
einfach in die Funktion, die Dir Dein Lehrerarray erzeugt eine kleine Schleife einbauen…
in etwa so:
$id = $result[id]
if ($_GET[‚lehrer‘] == $id ) $lehrerarray[$id] = „".$result[‚lehrername‘]."“;
else $lehrerarray[$id] = $result[‚lehrername‘];

wenn ein lehrer mehrere faecher unterrichtet… wie in meinem
falle die deutschlehrerin… dann ist das schon komplexer

nur dann wenn Du nur das Fach angeklickte Fach highlighten willst, aber dann bietet sich wiederum an das andere array mit einer Funktion wie oben auszustatten… Wobei es wohl besser wäre, wenn das in der Anzeigefunktion realisiert würde, wegen mehreren Lehrern fürs gleiche Fach…

ich persönlich würde es wohl so machen
(Grob überrissen)
$function erstellelehrerarray()

[…]

da muss ich mich dann erstmal reindenken.
die auflistung der lehrer und schuler habe ich ja schon.

ich weiss nur nicht, wie ich die faehcer und die lehrer
optimal ins verhaeltnis bringe.

mache ich einen table teachers der die felder

ID | name | Deutsch | Mathe | Kunst | …
1 | Fr. A| 1 | 0 | 1 |
2 | Hr. G| 0 | 1 | 0 |

beinhaltet…
oder eher :

Table Teachers
ID | name | Fach
1 | Fr. A| 1,3
2 | Hr. G| 2

Table subjects
ID | subject
1 | Deutsch
2 | Mathe
3 | Kunst

bin mir nicht ganz klar darüber was Du meinst, aber ich würde eher Version 2 nehmen… Allerdings dachte ich würde das ganze über die Tabelle timetable verknüpft werden… Dann braucht kein Lehrer eine eindeutige Fachzuordnung.

letzteres hat dann wohl den vorteil, dass wenn ein fach
hinzukommt ich einfach nur die faecher tabelle anpassen
muss…und nicht die lehrertabelle… allerdings muss ich doch
dann ne menge daten in einem array halten-.-- also waehrend
der laufzeit… strapaziert das nicht den server? also…wird
das script dadurch nicht langsamer, wenn da mehrere drauf
zugreifen?

Das Array wird ja nur solange erhalten, wie die Seite zum Aufbau braucht. Sicher ist es nicht unbedingt schön ein grosses array über ein langes Script mitschleifen zu lassen. unnötig viele mysql queries wären aber imho schlechter. Bei relationen wie in Deinem Fall solltest Du Dir aber über performance noch keine Gedanken machen müssen.

ich will das ganze fuer mehrere klassen innerhalb einer schule
entwerfen…

Ist dann nur ne Sache der Datenbankselektion und Pflege. Wäre halt dann wohl am geschicktesten, wenn nur die timetable tabelle für jede Klasse anders aussehen muss.

Hoffe das hilft Dir weiter

auf alle faelle schon mal ein guter denkanstoss.
bin gespannt auf deine antworten meiner folgefragen.
merci

hab zwar keine richtigen Fragen gefunden, aber ich hoffe meine Kommentare waren wieder hilfreich :wink:

hiho,

ich weiss ja nicht ob das genau gewuenscht war, aber ich hatte gerade so lust auf ein relationales db schema das ich mal folgenden aufbau vorschlage:

Relationen:
Lehrer
Fächer
lehre
Klasse
Schüler
daytable
hourtable
timeplaner

details:
Lehrer
Lehrer_id(int) | name (char)

Fächer
fach_id(int) | name (char)

lehre
fach_id(int) | lehrer_id (char)

klasse
klassen_id(int) | Klassenbez. (char)

Schüler
Schüler_id(int) | name (char) | Klassen_id (int, foreign key)

Daytable
Time_id(int) | wochentag (int, unique) | (evtl.) Wochentagname (char)

Hourtable
Time_id | hour_id

Timeplaner
Time_id(int) |hour_id | klassen_id | Lehrer_id | fach_id

falls nun eine klasse, z.B. wegen religion nun einmal gleichzeitig von unterschiedlichen lehrern unterrichtet wird, kann man das einfach loesen, indem man die lehrer_id ebenfalls noch in Timeplaner als primary key mit dazu nimmt!

heute strapazier ich die Community…

nicht wirklich

meine Vermutung: ich habe einen Fehler im Konzept.

Ich habe mehrere tables… und die sollen abhaengig
voneinander sein.
im klartext…es geht um einen stundenplan.

der stundenplan hat tage und faecher.
also… table faecher, table timetable, table teacher
so… nun hat jedes fach eine id, jeder lehrer eine id…
ich moechte dass der stundenplan dann klassisch angezeigt
wird.

unter motag sollte dann stehen zbsp:

ENGLISCH (frau teller)
DEUTSCH (herr besteck)

usw.

wie mache ich das am geschicktesten??
oder ist mein datenbankmodell eh gruetze?

grusz

PixelKoenig

dann kannst du alles via sql abfragen. und brauchst eigentlich via php nur noch schoen darstellen!

hth

  • josh -

man koennte noch eine relation
yeartable einbauen, die man ebenfalls noch in timetable mit aufnimmt,
allerdings muss man dann die relationen daytable und hourtable entsprechend anpassen.

dann ist es auch moeglich alte stundenplaene zu behalten, und moeglicherweis abzurufen. das kann man ja anfangs ignorieren, und schliesslich diese funktionalitaet miteinfuegen.

ist ein geringer mehraufwand, aber dafuer mehr transparenz.

gruetzi

  • josh -