Erstellung von Terminverwaltung-Tabelle(n)

Dieses Thema im Forum "SQL und Datenbanken" wurde erstellt von worker, 06.07.2012.

  1. worker

    worker König

    Dabei seit:
    29.03.2007
    Beiträge:
    848
    Zustimmungen:
    0
    Moin @ll,

    ich bräuchte etwas Hilfe/Anregung bei einem privaten Projekt.
    Es geht darum, dass eine Terminverwaltung aufgestellt werden soll.
    (Die Nachrichtenverwaltung (like E-Mails) steht und war vergleichsweise einfach zu bewältigen für mich.)

    Die Termine sollen aber nur von bestimmten Usern bzw. Gruppen einsehbar sein.

    Zuerst dachte ich an eine Tabelle: 'id' | 'termindatum' | 'ersteller' | 'termin_text' | 'zugriff_gruppe' | 'zugriff_user'
    Dies würde auch funktionieren, bis auf 'zugriff_user'. Denn hier müsste ja eine Liste in diesem Feld erstellt werden.
    Doch ich denke mir, dass dieses Vorgehen umständlich zu händeln wäre und auch nicht im Sinne von SQL ist.
    (Wäre ja quasi eine Tabelle in einer Tabelle wäre.)

    Ich fürchte (weil ich das mit den Tabellen-Verknüpfungen (noch) nicht blicke), dass ich um zwei Tabellen nicht
    herum kommen werde.
    Doch mit zwei (bzw. mehreren) Tabellen komme ich überhaupt nicht auf einen "grünen Zweig". Weiss weder
    wie das jetzt aussehen, noch wie ich das angehen soll mit zwei Tabellen. Wo in welcher Tabelle soll was
    verwaltet/eingetragen werden?

    Für Ideen, Vorschläge, etc wäre ich sehr dankbar.

    Merci
    Worker
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. Lilly

    Lilly Grünschnabel

    Dabei seit:
    06.07.2012
    Beiträge:
    8
    Zustimmungen:
    0
    Hallo worker,

    das gleiche Problem kann sich dann auch mit der Spalte 'zugriff_user' stellen, oder? Vielleicht willst Du ja doch einzelne Termin mehreren Gruppen zur Verfügung stellen.

    Gruß Lilly
     
  4. worker

    worker König

    Dabei seit:
    29.03.2007
    Beiträge:
    848
    Zustimmungen:
    0
    Hallo Lilly,

    hm, das stimmt allerdings auch wieder. Soweit hatte ich nicht gedacht. Demnach müsste ich wohl mit sogar mehr als zwei Tabellen arbeiten? *grübel*
     
  5. Lilly

    Lilly Grünschnabel

    Dabei seit:
    06.07.2012
    Beiträge:
    8
    Zustimmungen:
    0
    Hallo worker,

    und die nächste Normalisierungsüberlegung wäre, ob ein User nicht auch mehereren Gruppen zugeordnet werden kann (1:n-Beziehung)?
     
  6. worker

    worker König

    Dabei seit:
    29.03.2007
    Beiträge:
    848
    Zustimmungen:
    0
    Hmmm,

    da sind wir schon bei mindestens 4 Tabellen *schwitz* :-) ...

    Würde es erstmal so (mit PHP/MySQL) gehen? ...

    Tabelle 1 [Nur Termine]:
    'id' | 'ersteller' | 'termindatum' | 'termin_text'

    Tabelle 2 [Welcher User auf welche Tabelle-1-id zugreifen darf]:
    'id' | 'zugriffs_user' | 'zugriff_auf_tabelle_1-id'

    Tabelle 3 [Welche Gruppe auf welche Tabelle-1-id zugreifen darf]:
    'id' | 'zugriffs_gruppe' | 'zugriff_auf_tabelle_1-id'

    Tabelle 4 [User <-> Gruppen - Zugehörigkeit]
    'id' | 'user' | 'zugehörige_gruppe'

    Wird das nicht zu kompliziert bei Abfragen usw. ?
     
  7. Lilly

    Lilly Grünschnabel

    Dabei seit:
    06.07.2012
    Beiträge:
    8
    Zustimmungen:
    0
    Hallo worker,

    ja, so sollte es funktionieren. Allerdings musst Du die letzte Tabelle noch einmal überdenken, denn Du hast ja hier eine n:m-Beziehung, also ein User kann in einer oder mehreren Gruppen sein (oder vielleicht sogar in keiner?) und eine Gruppe hat mehrere Mitglieder.

    Gruß Lilly
     
  8. worker

    worker König

    Dabei seit:
    29.03.2007
    Beiträge:
    848
    Zustimmungen:
    0
    Hi Lilly,

    Also soweit so gut ...
    Wegen der User<->Gruppen - Zuweisung bin ich mir da jetzt nicht ganze sicher.
    Tabelle 4 könnte man - denke ich - so belassen, denn sogar für jede Gruppe könnte der gleiche User eingetragen werden.

    Allerdings könnte man auch (nach reichlich Nachdenken ^^) jedesmal eine neue Gruppen-Tabelle erstellen.
    Dies würde dann wohl so aussehen (kurz und knapp):
    Tabelle X [GruppenName]:
    'id' | 'zugehöriger_user'

    Wäre das aber nicht zu "overload" da jedesmal für eine neue Gruppe eine eigene Tabelle zu erstellen?

    Ansonsten danke ich Dir sehr für's "an die Hand nehmen" :-).

    LG
    Worker
     
  9. Arch

    Arch Foren As

    Dabei seit:
    21.10.2011
    Beiträge:
    81
    Zustimmungen:
    0
    Bei einer n:m Beziehung bildet man einfach eine Zwischentabelle UserZurGruppe bei der der Primärschlüssel der Usertabelle und der Primärschlüssel der Gruppe verwendet wird. Zusätzlich können dort noch weitere Informationen gespeichert werden (falls nötig), wie z.B. ein Datum, ......
     
  10. #9 worker, 07.07.2012
    Zuletzt bearbeitet: 07.07.2012
    worker

    worker König

    Dabei seit:
    29.03.2007
    Beiträge:
    848
    Zustimmungen:
    0
    @Arch,

    aha - also alle Tabellen oben werden erstmal so geändert, dass ich nicht mit namen, sondern IDs (z.B. user_id, etc.)
    arbeite. Dann wird Tabelle 4 wird geändert in:
    'user_id' | 'gruppe_id'

    Demnach muss ich zu guter Letzt nur noch eine Tabelle mit den Gruppen anlegen:
    Tabelle 5 [Gruppen]:
    'id' | 'gruppe_name'

    Ist das so richtig? Kein Denkfehler drinnen?

    Merci
    Worker

    Nachtrag:
    Noch ne Frage: Schreibt man besser die IDs in der ersten Spalte so, wie ich es immer tue, oder doch lieber ausgeschrieben (z.B. in Tabelle 5: statt 'id' --> 'gruppe_id') ?
     
  11. worker

    worker König

    Dabei seit:
    29.03.2007
    Beiträge:
    848
    Zustimmungen:
    0
    Also keine Ahnung, ob meine Fragen im Post #9 iwie doof waren ....

    Doch jetzt hätte ich eine weitere Frage (nach einigen Tagen an Herumgebastel) - und zwar zum MySQL-"SELECT".
    U.a. habe ich folgenden SELECT versucht, doch das Ergebnis ist "leer":
    PHP:
    mysql_query("SELECT g.id, ug.user_id FROM gruppen AS g INNER JOIN user_gruppe AS ug ON g.id=ug.gruppe_id AND ug.user_id='$user_id'") or die(mysql_error());
    Es wird anscheinend nichts selektiert.
    $user_id hat einen korrekten Wert vor der Abfrage.

    Ich weiss nicht, ob die Syntax falsch ist, oder was ich sonst falsch gemacht haben könnte bei der SELECT-Anweisung.

    LG
    Worker
     
  12. Arch

    Arch Foren As

    Dabei seit:
    21.10.2011
    Beiträge:
    81
    Zustimmungen:
    0
    Code:
    SELECT g.id, ug.user_id FROM gruppen AS g INNER JOIN user_gruppe AS ug ON g.id=ug.gruppe_id WHERE ug.user_id='$user_id'
    ...sollte das sein was du suchst :)
     
  13. worker

    worker König

    Dabei seit:
    29.03.2007
    Beiträge:
    848
    Zustimmungen:
    0
    @Arch

    hoppla ... hätte mich auch treten können, ein WHERE anstatt von AND zu nehmen ^^

    Danke :)

    War jetzt einige Tage weg - werd mich morgen wieder dran setzen.

    LG
    Worker
     
  14. worker

    worker König

    Dabei seit:
    29.03.2007
    Beiträge:
    848
    Zustimmungen:
    0
    Sodele, Mädels .... und Jungs *g*

    Bin am Ende mit meinem Latein und Google mag auch nimmer :P

    Folgenden Select verwende ich, damit ich an die Termine rankomme - und zwar sollen die Termine der Gruppe ausgegeben werden, in denen (der Gruppen) der User eingetragen ist:
    Code:
    SELECT *
    FROM termine AS t
    JOIN gruppen AS g
    JOIN user_gruppen AS ug
    JOIN gruppe_termin AS gt
    ON g.id=ug.gruppe_id WHERE ug.user_id='$user_id'
    AND gt.termin_id=g.id
    AND t.id=gt.termin_id
    AND t.termin_datum='$date_today_timestamp'
    LIMIT 20
    Ich schätze mal, dass das nicht ganz so korrekt ist, was ich da hingeschmiert habe, aber selbst LEFT und RIGHT JOINs bringen das gleiche Ergebnis. Nämlich Nix (Wie Flasche leer).
    Worauf ich dann Zugriff haben möchte sind Felder in der Termine-Tabelle (Betreff und Uhrzeit).

    Kriech ich einen Beistand bitte? *klimperklimpermitderaugenwimper* :)
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. daboss

    daboss Keine Macht für niemand!

    Dabei seit:
    05.01.2007
    Beiträge:
    1.294
    Zustimmungen:
    0
    Ort:
    sydney.australia.world
    Ich weiß nicht so ganz, wie deine Tabellen jetzt ausschauen, aber mMn vergleichst du eine Termin-ID mit einer Gruppen-ID (siehe "AND gt.termin_id = g.id")
     
  17. Arch

    Arch Foren As

    Dabei seit:
    21.10.2011
    Beiträge:
    81
    Zustimmungen:
    0
    Darf ich mal fragen was du mit solchen Abfragen erreichen willst? Du kannst dir natürlich die Daten auch in mehreren SQL-Abfragen holen und brauchst nicht eine Superman-SQL-Abfrage basteln :D .
    Weist du was ein RIGHT- oder ein LEFT-JOIN bedeutet, da sollte man nicht einfach so damit rumwerfen :) . Ein kleiner Tipp, die Namen kommen aus der Mengenlehre, zwei Mengen -> LEFT-/INNER-/RIGHT-JOIN :) .

    Generell zu JOINS:
    - Jedes JOIN-Statement braucht ein ON Statement ->
    Code:
    gruppe JOIN gruppe_zwischen ON gruppe.i = gruppe_zwischen.b
    - Du verschachtelst die JOINS miteinander:
    Code:
    FROM Tabelle1 JOIN (Tabell2 JOIN Tabelle3 ON Tabelle2.id = Tabelle3.id) ON Tabelle1.id = Tabelle2.id
    --> Bei mehreren Tabellen wird das natürlich immer weiter verschachtelt.

    Das was du hast ist eine Mischung. Du musst in SQL-Abfragen nicht zwingend die JOINS nehmen, die sollen dir nur deine Arbeit erleichtern und von den WHERE-Bedingungen weg kommen. Du kannst es auch wie du machen und einfach nur die Tabellen selektieren und über die WHERE-Klausen alle Bedingungen festlegen.
    Code:
    SELECT *
    FROM ALLE TABELLEN AUFLISTEN OHNE JOIN
    WHERE tabelle1.id=tabelle2.id AND tabelle2.id = tabelle3.id AND ....
    Nichts anderes wird durch die JOINS durchgeführt. Der Vorteil dabei ist dass du noch weitere Möglichkeiten hast das ganze zu Selektieren, z. B. mit einem LEFT-/RIGHT-/CROSS-/....-JOIN. Das ist in den WHERE-Bedingungen dann schon schwieriger umzusetzen (im Vergleich zum JOIN).

    Generell solltest du dir vielleicht nochmal ein Buch oder ein Tutorial zu JOINS durchlesen :) .
     
Thema: Erstellung von Terminverwaltung-Tabelle(n)
Besucher kamen mit folgenden Suchen
  1. Tabelle für terminverwaltung

Die Seite wird geladen...

Erstellung von Terminverwaltung-Tabelle(n) - Ähnliche Themen

  1. Evolution mit Email-Erstellungsproblem

    Evolution mit Email-Erstellungsproblem: Etwa jeder dritte Versuch eine Email zu erstellen, führt zur Notwendigkeit Evolution zu "beenden" und neu zu starten. Daten: Evolution 3.10.4...
  2. Kdenlive 0.9.4 vereinfacht die Erstellung von DVDs

    Kdenlive 0.9.4 vereinfacht die Erstellung von DVDs: Der nichtlineare Video-Editor Kdenlive wurde in Version 0.9.4 veröffentlicht. Zu den Neuerungen der aktuellen Variante gehören neben einem neuen...
  3. RHEVM-SETUP Fehler bei der Erstellung der Datenbank

    RHEVM-SETUP Fehler bei der Erstellung der Datenbank: Hallo Leute, ich bin bei der Installation des Managers nun an der Stelle angekommen, wo ich per rhevm-setup den Manager installieren kann....
  4. 1:1 NAT brauche Hilfe bei der Erstellung eines Shellscripts

    1:1 NAT brauche Hilfe bei der Erstellung eines Shellscripts: Hi, ich brauche Hilfe bei der Erstellung eines Shellskripts, was nach OpenVPN Neueinwahl die Datei /var/db/opt1_ip parst (in dieser Datei steht...
  5. Probleme mit Raid1-Wiederherstellung unter Debian squeeze - Grub2 startet nicht

    Probleme mit Raid1-Wiederherstellung unter Debian squeeze - Grub2 startet nicht: Hallo, ich habe Probleme mit der Raid1-Wiederherstellung unter Debian squeeze - Grub2 startet nicht. Ich habe folgende Partitionen (2...