yo,
Das System ist "im Rennen". Pferde (Konzepte) können jetzt nicht mehr ausgetauscht werden. Die Messe ist Mitte Juni, das System MUSS laufen.
gut lassen wir am besten die ganze diskussion um das design der datenbank und konzentrieren uns mehr auf die abfragen, wobei sich natürlich die schwierigkeit mancher abfragen auf das design bezieht.
Die kleinste Planungseinheit ist ein Slot (Zeiteinheit), vergleichbar mit dem Stundenplan in der Schule.
jetzt wo du das thema schule anspricht, muss ich trotzdem noch mal auf das design der daten eingehen, weil zu meiner ausbildung wir genau dieses beispiel mit einem stundenplan entwickelt haben. es ist sehr mit deiner umgebung vergleichbar, klassen wären in deinem falle besucher, lehrer wohl aussteller (schade, dass man in der schule keine wunschlehrer angeben kann), bzw. events, zeiträume als Unterrichtsstunden (slots). auch dort gab es vorgaben, dass keine entität (klasse, lehrer oder raum) zur gleichen zeit (schulstunden und bei dir slots) zweimal eingetragen wurde. das kann man recht leicht über unique constraints lösen. wichtig ist aber vor allem, dass die entitäten klasse, lehrer, räume alle zusammen in -> einer <- beziehungstabelle miteinander verknüpft wurden, was letztlich nicht anderes als den unterichtsplan abgebildet hat.
und genauso könnte man deine umgebung ansehen, dann würde in einer tabelle alle termine abgebildet werden, was auch die abfragen erleichtert. auch unterschiedliche pausen könnten man dort festhalten.
Der Wunsch, dass Besucher B_01 den Aussteller A_55 sprechen möchte, ergibt einen Eintrag in der Tabelle "kontakte", zunächst mit dem Slot=0, also noch KEINE Buchung, sondern ein Wunsch.
ok, soweit kann ich folgen.
Der Wunsch, dass Besucher B_01 die Teilnahme am Event E_12 (Erdgas - die Alternative für den Fuhrpark), E_15 (Innovationen im Automobilbau) und E_01 (Mittagessen) wünscht, gibt entsprechende Einträge in der Tabelle "eventbuchungen" mit Slot=0.
ich verstehe, eventwünsche sind also keine wünsche eines besuchers mit einem gesprächparnter, sondern eigenständige termine. ich dachte zuerst, man sucht sich einen gesprächspartner aus und äußert dazu einem wunsch. dann braucht man natürlich auch keine beziehung zwischen gesprächspartner und eventwünsche, wie ich ursprünglich angenommen habe.
Der Besucher B_01 kann weitere Wünsche haben. Im Extremfall sogar mehr, als seine Anwesenheit in Slots zulässt. Das Programm kann nur freie Slots zu Terminen machen.
hört sich schwer danach an, der besucher kann erst mal alle wünsche äußern und dann sehen, welche treffen er bekommmen kann und dann erst seine zeit entsprechend plant.
Mmh, den Sinn kann ich nicht erkennen. Im Gegenteil: 2003 hatte ich noch Gesprächs- und Eventwünsche in einer Tabelle. Das war ein heilloses Durcheinander.
schwer zu beurteilen, woran das chaos gelegen hat. wie auch immer, ich habe jetzt deine umgebung besser verstanden, das dauert bei mir in aller regel im ein wenig länger. mein verstand arbeitet einfach langsamer, wie ein zug, der erst einmal auf touren kommen muss, aber dann schießt er oftmals über das ziel hinaus.... ;-)
und in dieser beziehungstabelle steht dann der gesprächspartner (wunschpartner) und sein eventwunsch. da du die stunden aufteilst (nicht von bis) musst du diese auslagern, ansonsten würde sie auch genau da mit rein gehören. aber was nörgeln wir immer über das db design herum. meistens läßt es sich ja sowieso nicht ändern.
NICHT VERSTANDEN, was du meinst.
einfach wieder verwerfen, ich bin da immer noch davon ausgegangen, dass für einen termin besucher, aussteller und event zusammen gehören. dies ist aber nicht der fall. ich erinnere mich wieder dunkel an dich, du bildest eine messe ab ?
Die Gespräche zwischen Besuchern und Ausstellern sind eine 1:1 Beziehung. Also ganz anders als die Events. Auch hier noch Sonderformen (mehrere Aussteller-Mitarbeiter können gleichzeitig getrennte Gespräche führen und mehrere Besucher, die als Gruppe ein gemeinsames Gespräch mit einem Aussteller führen. Okay, also 1:n).
nein, sowohl zwischen [besucher und aussteller] und [besucher und events] sind beides n:m beziehungen. ein besucher kann mehrere aussteller sprechen wollen und ein aussteller kann mehrere besucher haben. genauso verhält es sich mit den events. dass ein besucher nur einen aussteller und ein event zur gleichen zeit besuchen kann, das ist ein anderes thema, es bleibt aber eine n:m beziehung, die du abbilden musst. gerade wenn es sich um wünsche der besucher handelt, da du ja gesagt hast, dass diese sich zeitlich auch erst einmal überlappen können.
ich habe mir noch mal deine beispieldatensätze mit alfred meyer angeschaut und verstehe deine situation nun besser. ich habe immer zwischen beziehungen gesucht, zu welchen slot (stunde) er denn nun das event besucht oder den wunschpartner sprechen will. wenn ich das aber richtig verstehe, dann hälst du in der einen tabelle fest, wann er da ist und in den anderen beiden welchen aussteller, bzw. event er besuchen will, wobei noch offen ist, wann genau er das in seiner zeit, die ihm zur verfügung steht, macht. puhh langer satz....
ok, wovon ich immer spreche, ich halt der terminplan, der in einer tabelle abgebildet wird, quasi das ergebnis, dass bei all den besuchern, ausssteller und events durch dein programm errechnet werden soll. was du aber erst einmal abbilden willst, ist der zustand, um überhaupt erst enmal den terminplan entwickeln zu können. ich bin manchmal wirklich schwer von begriff.
genug der langen vorrede, das problem ist, dass es bei deinem JOIN trotzdem zu den angesprochenen problemen in meinem ersten posting kommt, weil eben die tabellen nicht miteinander in beziehung stehen. sie geben zwar an, welcher besucher welche events oder aussteller sprechen will, läßt aber den zeitpunkt offen. durch diese fehlende verbindung der zeit, ordnet der join quasi zu jedem slot, den der besucher angibt, alle events und ausstellerbesuche zu. da versteckt sich deine potenzierung.
wie löst man das problem nun ? UNION wäre eine lösung, wird aber durch die version deines dbms ausgeschlossen. ausserdem würde der UNION operator die einzelnen informationen auch in mehreren datensätze liefern und du willst es ja in einem abbilden. unterabfragen wäre da die erste wahl, aber diese gehen auch nicht. ärgerlich, aber vielleicht kann man tricksen.
wir müssen den JOIN wagen und die besagte potenzierung rausbekommen. eventuell kann uns dabei der DISTINCT Operator hilfreich sein. das funktioniert aber nur, wenn ein besucher, nicht mehr als einmal den gleichen zeitslot, aussteller oder eventwunsch äußern kann.
SELECT tab1.adress_id,
COUNT(DISTINCT tab1.stunde) AS 'Stunden',
COUNT(DISTINCT tab2.aussteller_id) AS 'Aussteller',
COUNT(DISTINCT tab3.event_id) AS 'Events'
FROM anwesenheit AS tab1, gespraechsparnter AS tab2, eventwuensche AS tab3
AND tab1.adress_id = tab2.besucher_id
AND tab1.adress_id = tab1.adress_id
GROUP BY tab1.adress_id
ORDER BY 1
du kannst in der WHERE klausel den besucher auf id 11 einschränken, wenn es gewünscht ist und dir das GROUP BGY und ORDER BY sparen. ich habe erst mal alle besucher ins boot genommen. schau mal, was dabei raus kommt.
Ilja