roebert stumpe: db-design für favoritenverwaltung

Hallo Leute,

also ich programmiere z.Z. an einer Erfassungsanwendung (browserbasiert,PHP,Oracle) mit der Angestellte Ihre Stunden erfassen.
Diese Leistungen sind auf versch. Auftraege zu buchen. Beim Anlegen der erbrachten Leistungen sollen die versch. Auftraege in einer select-liste angezeigt werden - jetzt kommen die Favoriten ins Spiel - der Angestellte kann sich Favoriten anlegen um die select-liste auf seine oft gebrauchten Auftraege zu reduzieren.
Und ab hier komme ich etwas ins stottern - ich habe bis jetzt ne tabelle 'fav' mit user_id(number), auftrags_id(number) - dort befindet sich dann pro Favorit pro Nutzer ein Eintrag.
besonders optimal kommt mir das nicht vor.
Die Maske / das Formular wo der Nutzer seine Favoriten anlegen kann leidet auch etwas darunter ... dort gibt es nämlich die Abfrage

select elv_projekte.id, elv_projekte.bezeichnung from elv_projekte, elv_fav where elv_projekte.id not in (select proj_id from elv_fav where user_id = '".$_COOKIE['user_id']."')

es werden nämlich gar keine Auftraege angezeigt wenn nicht schon ein Favorit vorhanden ist

ich hatte auch schon über dieses db-model nachgedacht:
tabelle fav mit user_id(number), auftraege(varchar2)
und dort alle Auftrags-IDs in den String rein ... dann muss ich den String immer zerlegen usw ...

wer kann mir den Denkfehler austreiben?

danke im vorraus

  1. yo,

    wer kann mir den Denkfehler austreiben?

    also für teufelsaustreibungen sind die geistlichen zuständig. aber mein tipp wäre keine neue tabelle für die favoriten aufzumachen. letztlich sollte es nur ein zusätzlich attribut der beziehungstabelle zwischen aufträge und mitarbeiter sein, dort wo auch die stundenanzahl an dem projekt der mitarbiter stehen. ein zusätzlich feld einfügen mit 0 für kein favorit und 1 für favorit.

    Ilja

    1. letztlich sollte es nur ein zusätzlich attribut der beziehungstabelle
      zwischen aufträge und mitarbeiter sein, dort wo auch die
      stundenanzahl an dem projekt der mitarbiter stehen. ein zusätzlich
      feld einfügen mit 0 für kein favorit und 1 für favorit.

      nein das geht leider nicht -  in der 'Beziehungstabelle' zwischen Auftraege und Mitarbeiter werden die erfassten Stunden gespeichert (user_id, auftrags_id, datum, dauer ....)
      meines Erachtens nach der voellig falsche Platz fuer die Favoriten
      sorry das passt nun garnicht ins daten-model

      1. yo,

        nein das geht leider nicht -  in der 'Beziehungstabelle' zwischen Auftraege und Mitarbeiter werden die erfassten Stunden gespeichert (user_id, auftrags_id, datum, dauer ....)

        gehen tut es sehr wolhl, nur wollen müssen wa.

        meines Erachtens nach der voellig falsche Platz fuer die Favoriten
        sorry das passt nun garnicht ins daten-model

        ganz genau dort gehört es hin und da passt es wunderbar rein. und dann lösen sich auch alle abfrageprobleme wie von geisterhand....

        Ilja

        1. sorry aber meine angaben waren auch nicht ausreichend um sich das datenmodel so richtig vorzustellen ...
          aber was ilja vorschlaegt ist einfach kaese

          ich muss als angestellter noch gar keine datensaetze in der leistungstabelle haben (wenn er sich frisch anmeldet und noch nix in der erfassung gemacht hat) ... wo sollen dann die favoriten gespeichert sein??? bei den nicht vorhandenen datensaetzen?

          1. yo,

            aber was ilja vorschlaegt ist einfach kaese

            was hast du gegen kaese, der schmeckt wunderbar...

            ich muss als angestellter noch gar keine datensaetze in der leistungstabelle haben (wenn er sich frisch anmeldet und noch nix in der erfassung gemacht hat) ... wo sollen dann die favoriten gespeichert sein??? bei den nicht vorhandenen datensaetzen?

            wenn ich deine frage richtig verstanden habe, dann willst du favoriten für zitat: "Angestellte kann sich Favoriten anlegen um die select-liste auf --> seine <-- oft gebrauchten Auftraege zu reduzieren".

            die betonung liegt auf seine aufträge, sprich aufträge, in denen er auch eine bestimmte anzahl von stunden gearbeitet hat oder in zukunft arbeiten wird. und genau dann gibt es immer einen datensatz in der besagten beziehungstabelle. schließlich soll ein angestellter ja nicht einen favorit auf irgendeinen auftrag setzen, mit dem er nichts zu tun hat.

            die favoriten hängen letztlich von zwei entitäten ab, nämlich einmal den auftrag und zum anderen sind personenbezogen. und diese spalte sind bereits als primary key in der beziehungstabelle vorhanden, es handelt sich dann quasi um eine 1:1 beziehung der favoriten dazu.

            Ilja

            1. Hallo Ilja,

              leider kann ich nichts zu diesem Thread beitragen.
              Aber ich hätte mal eine andere Frage.

              Seit 2 Jahren programmiere ich php und beschäftige mich mit mysql. Ich studiere nun nebenbei. Im Kurs DB habe ich gerade SQL angefangen. Nun unterstützt mysql aber keine "subselects" und eine ganze Menge von Sachen die im Kurs vorkommen. So kann ich die Übungen nicht recht nachvollziehen.

              Welche DBS könnte ich zum lernen benutzen. Unterstützt Oracle das meiste von SQL:1999 ? Wenn ja gibt es für Oracle soetwas ähnliches wie phpmyadmin, dass mich die Queries und deren Resultate einfach eingeben/ausgeben lässt ?

              Danke

              1. scnr:
                bei installierten ora-client
                start>>ausfuehren>>sqlplusw

              2. yo,

                Nun unterstützt mysql aber keine "subselects" und eine ganze Menge von Sachen die im Kurs vorkommen. So kann ich die Übungen nicht recht nachvollziehen.

                jein, mysql unterstützt subselects seit den neusten versionen.

                Welche DBS könnte ich zum lernen benutzen. Unterstützt Oracle das meiste von SQL:1999 ?

                ja, so könnte man es ausdrücken.

                Wenn ja gibt es für Oracle soetwas ähnliches wie phpmyadmin, dass mich die Queries und deren Resultate einfach eingeben/ausgeben lässt ?

                phpadmin für oracle ist mir unbekannt. aber wie bereits erwähnt gibt es eine schöne konsole für oracle gennt sqlplus. diese kommt mit allen oracle versionen und ist sehr, sehr zu empfehlen. ein wenig muss man sich damit einarbeiten, aber dann geht es wunderbar.

                Ilja

                1. Danke für die nette Hilfe.

            2. was hast du gegen kaese, der schmeckt wunderbar...

              ich hab nix gegen kaese! - hab ich das behauptet????

              wenn ich deine frage richtig verstanden habe, dann willst du favoriten für zitat: "Angestellte kann sich Favoriten anlegen um die select-liste auf --> seine <-- oft gebrauchten Auftraege zu reduzieren". die betonung liegt auf seine aufträge, sprich aufträge, in denen er auch eine bestimmte anzahl von stunden gearbeitet hat

              muss nicht sein ...

              oder in zukunft arbeiten wird.

              so schon eher ...

              und genau dann gibt es immer einen datensatz in der besagten beziehungstabelle.

              noe es gibt n datensaetze (du hast wahrscheinlich datum, dauer, etc uebersehen - tip: angestellter kann am versch. tagen leistung erbringen -> versch. datensaetze)

              schließlich soll ein angestellter ja nicht einen favorit auf irgendeinen auftrag setzen, mit dem er nichts zu tun hat.

              rischtisch!! jetzt wirds langsam ...

              die favoriten hängen letztlich von zwei entitäten ab, nämlich einmal den auftrag und zum anderen sind personenbezogen. und diese spalte sind bereits als primary key in der beziehungstabelle vorhanden, es handelt sich dann quasi um eine 1:1 beziehung der favoriten dazu.

              und wieder falsch

              trotzdem danke ilja

              1. yo,

                ich will ich mal ein wenig genauer ausdrücken. du suchst hier hilfe, sprich mit deinen mitteln kommst du scheinbar nicht weiter. also solltest du dich mal ein wenig mehr öffnen, was andere ansichten betrifft, ohne damit sagen zu wollen, dass mein gesagtes alles richtig ist. es macht wenig sinn, denen die mit dir das problem angehen, auch noch vor den kopf zu stossen.

                noe es gibt n datensaetze (du hast wahrscheinlich datum, dauer, etc uebersehen - tip: angestellter kann am versch. tagen leistung erbringen -> versch. datensaetze)

                und das hätte auch sehr wohl anderes gemeint sein können, sprich nur einen datensatz pro angestellter und projekt. die stunden wären quasi die gesamtstunden und das datum der anfang seiner arbeit, bzw. wann er dem projekt zugeteilt wurde. wir können uns hier nicht alles aus den fingern saugen, sondern sind auf das gesagt (geschriebene angewiesen)

                wenn dem aber so ist, dass er pro tag (datum) einen datensatz haben kann, dann bleiben meine aussagen trotzdem bestehen. du brauchst dann eine weitere tabelle mit der angestellten id und projekt id. sollten in dieser tabelle nur die favoriten dargestellt werden, erübrigt sich eine weitere 0/1 spalte. willst du noch mehr attribute als nur die favoriten in die besagte tabelle reinnehmen, zum beispiel welcher mitarbeiter an welchen projekt arbeitet, dann musst du die 0/1 spalte wieder mit reinnehmen.

                also eine weitere tabelle zum beispiel mit den namen favoriten und den spalten projekt_id, angestellten_id. daraus lassen sich entsprechend die favoriten ablesen.

                und wieder falsch

                das ist nicht falsch, sondern sehr wohl richtig. letztlich hängt dein problem mit den favoriten damit zusammen, dass du solch ein tabelle noch nicht hast und es dir deswegen schwer fällt, diese zu integrieren.

                trotzdem danke ilja

                hau, ich habe versprochen
                Ilja