Simon: Freunde in der DB eintragen

Hi,

ich würde gern auf einer Seite so etwas machen, dass man andere User als Freunde eintragen kann, nur weiß ich nicht wie ich das mit der DB machen soll.
Ich hab derzeit eine DB die die Daten des Users speichert, d.h. Passwort, Username, usw.

Ich hoffe ihr versteht was ich meine,

MfG
Simon

  1. Hello,

    ich würde gern auf einer Seite so etwas machen, dass man andere User als Freunde eintragen kann, nur weiß ich nicht wie ich das mit der DB machen soll.
    Ich hab derzeit eine DB die die Daten des Users speichert, d.h. Passwort, Username, usw.

    Ich hoffe ihr versteht was ich meine,

    Nee, überhaupt nicht.

    Fang doch mal mit einem Datenmodell an, das Du gerne hättest.

    Und dann überlege Dir, wie diese Daten sich dem User darsellen sollen, damit er sie lesen, ändern, welche hinzufügen oder sogar wieder löschen kann.

    Zum Schluss überlegst Du dir dann, wie man das Datenmodell in der DB mit der Ansicht der Daten verbinden könnte. Welche Methoden müsste es da geben? Wie sollen die abgesichert werden? usw.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  2. Moin!

    ich würde gern auf einer Seite so etwas machen, dass man andere User als Freunde eintragen kann, nur weiß ich nicht wie ich das mit der DB machen soll.

    Du erstellst eine neue Tabelle, in die du die User-ID des Users und eines von ihm gewählten Freundes einträgst. Und damit nicht mehrfach dieselbe Freundes-Verbindung eingetragen werden kann, könntest du auf die Kombination dieser beiden Spalten einen UNIQUE-Index setzen.

    - Sven Rautenberg

    1. Hello,

      Du erstellst eine neue Tabelle, in die du die User-ID des Users und eines von ihm gewählten Freundes einträgst. Und damit nicht mehrfach dieselbe Freundes-Verbindung eingetragen werden kann, könntest du auf die Kombination dieser beiden Spalten einen UNIQUE-Index setzen.

      Da hier Selbstbezug besteht, bleibt nur noch die Frage, ob 1-3 dasselbe Gewicht hat, wie 3-1 und wie man das einerseits im Unique Key abfängt oder bei der Suche nach Verbindungen?

      Sind Verbindungen gerichtet oder richtungslos?

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hallo,

        »» Du erstellst eine neue Tabelle, in die du die User-ID des Users und eines von ihm gewählten Freundes einträgst. Und damit nicht mehrfach dieselbe Freundes-Verbindung eingetragen werden kann, könntest du auf die Kombination dieser beiden Spalten einen UNIQUE-Index setzen.
        Da hier Selbstbezug besteht, bleibt nur noch die Frage, ob 1-3 dasselbe Gewicht hat, wie 3-1 ...
        Sind Verbindungen gerichtet oder richtungslos?

        Freundschaften sind von der Idee her etwas Symmetrisches, was auf Gegenseitigkeit beruht. Anders ausgedrückt: Wenn A sagt, B sei sein Freund, dann bedarf diese Aussage der Verifikation durch B, der ebenfalls sagt, A sei sein Freund.

        Allerdings gibt es IRL oft den Fall, dass man jemanden für seinen Freund hält, dieser Jemand das aber ganz anders sieht ...

        So long,
         Martin

        --
        Wenn man keine Ahnung hat - einfach mal Fresse halten.
          (Dieter Nuhr, deutscher Kabarettist)
        1. Hello,

          »» Du erstellst eine neue Tabelle, in die du die User-ID des Users und eines von ihm gewählten Freundes einträgst. Und damit nicht mehrfach dieselbe Freundes-Verbindung eingetragen werden kann, könntest du auf die Kombination dieser beiden Spalten einen UNIQUE-Index setzen.
          Da hier Selbstbezug besteht, bleibt nur noch die Frage, ob 1-3 dasselbe Gewicht hat, wie 3-1 ...
          Sind Verbindungen gerichtet oder richtungslos?

          Freundschaften sind von der Idee her etwas Symmetrisches, was auf Gegenseitigkeit beruht. Anders ausgedrückt: Wenn A sagt, B sei sein Freund, dann bedarf diese Aussage der Verifikation durch B, der ebenfalls sagt, A sei sein Freund.

          Allerdings gibt es IRL oft den Fall, dass man jemanden für seinen Freund hält, dieser Jemand das aber ganz anders sieht ...

          Und wie bildet man den Idealfall nun im Datenmodell ab?

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Hi,

            »» Freundschaften sind von der Idee her etwas Symmetrisches, was auf Gegenseitigkeit beruht. Anders ausgedrückt: Wenn A sagt, B sei sein Freund, dann bedarf diese Aussage der Verifikation durch B, der ebenfalls sagt, A sei sein Freund.

            Und wie bildet man den Idealfall nun im Datenmodell ab?

            keine Ahnung - dieser Fall ist mir in meiner Datenbank-Erfahrung (die noch stark ausbaufähig und -würdig ist) noch nicht begegnet. Bisher hatte ich nur Relationen der Form x->y, vielleicht noch x->y->z. Aber ein x<->y hatte ich noch nicht.

            Ich bin aber, wie gesagt, in Datenbankaspekten noch Fußgänger.

            So long,
             Martin

            --
            Datenbanken speichern keine User.
            Das liegt daran, daß Datenbanken mit der Lebensmittelversorgung für gespeicherte biologische Lebensformen derzeit noch Probleme haben.
              (Christoph Schnauß)
            1. Hello,

              »» Freundschaften sind von der Idee her etwas Symmetrisches, was auf Gegenseitigkeit beruht. Anders ausgedrückt: Wenn A sagt, B sei sein Freund, dann bedarf diese Aussage der Verifikation durch B, der ebenfalls sagt, A sei sein Freund.

              Und wie bildet man den Idealfall nun im Datenmodell ab?

              keine Ahnung - dieser Fall ist mir in meiner Datenbank-Erfahrung (die noch stark ausbaufähig und -würdig ist) noch nicht begegnet. Bisher hatte ich nur Relationen der Form x->y, vielleicht noch x->y->z. Aber ein x<->y hatte ich noch nicht.

              Das wäre hier eine Beziehung x<->x, also ein Selbstbezug. Sonst wäre es nicht schwierig, einen doppelten Eintrag zu vermeiden.

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
              Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
              1. Hallo,

                »» Aber ein x<->y hatte ich noch nicht.
                Das wäre hier eine Beziehung x<->x, also ein Selbstbezug.

                also ist Harry der Freund von Harry? Schon möglich, ich bin auch mein bester Freund. Aber darum geht es doch nicht, sondern um eine bivalente Beziehung, die zwei Elemente/Datensätze ungerichtet (oder gleichwertig in beide Richtungen) miteinander verbindet. Dass ein Datensatz x nicht nur mit y, sondern auch mit u, v und w eine solche Beziehung haben kann, ist dabei zunächst belanglos.

                Oder wollen wir aus "A ist Freund von B" und "B ist Freund von C" auch folgern, dass A auch ein Freund von C ist? Nein, das wäre mir dann doch zu weit hergeholt.

                Sonst wäre es nicht schwierig, einen doppelten Eintrag zu vermeiden.

                Meinst du? - Naja, man könnte beim Eintragen einer solchen Relation die beiden IDs so sortieren, dass immer der kleinere Wert in die erste Spalte kommt. Dabei nutzt man nur aus, dass IDs eindeutig sind (schließlich repräsentieren sie ja Datensätze aus derselben Tabelle), während ihr tatsächlicher Wert belanglos ist. In Verbindung mit einem unique index sind wir dann schon gewaschen und gekämmt.
                Auf die Weise könnte man auch gleich die fragwürdigen Einträge "X ist Freund von X" erkennen und abweisen.

                So long,
                 Martin

                --
                Bitte komme jemand mit einem *g* zum Wochenende, damit nicht über mich gelacht wird.
                  (Gunnar Bittersmann)
                1. Hello,

                  Das wäre hier eine Beziehung x<->x, also ein Selbstbezug.

                  also ist Harry der Freund von Harry?

                  siehe Datenmodell unter https://forum.selfhtml.org/?t=187360&m=1245211

                  Liebe Grüße aus dem schönen Oberharz

                  Tom vom Berg

                  --
                  Nur selber lernen macht schlau
                  http://bergpost.annerschbarrich.de
                  1. Hi,

                    »» »» Das wäre hier eine Beziehung x<->x, also ein Selbstbezug.
                    »» also ist Harry der Freund von Harry?
                    siehe Datenmodell unter https://forum.selfhtml.org/?t=187360&m=1245211

                    hab ich gelesen und verstanden. Also doch x<->y und nicht x<->x. Letzteres wäre ja auch irgendwie sinnlos - einen Datensatz auf sich selbst zu beziehen.

                    Ich vermute, du hast mit x und y eher Tabellen gemeint, und nicht Datensätze? Also präzise: Sei T die Tabelle und a..z die Datensätze, dann suchen wir eine Relation T.x<->T.y, und genau das habe ich doch beschrieben.

                    Ciao,
                     Martin

                    --
                    Bitte komme jemand mit einem *g* zum Wochenende, damit nicht über mich gelacht wird.
                      (Gunnar Bittersmann)
                    1. Hello,

                      Hi,

                      »» »» Das wäre hier eine Beziehung x<->x, also ein Selbstbezug.
                      »» also ist Harry der Freund von Harry?
                      siehe Datenmodell unter https://forum.selfhtml.org/?t=187360&m=1245211

                      hab ich gelesen und verstanden. Also doch x<->y und nicht x<->x. Letzteres wäre ja auch irgendwie sinnlos - einen Datensatz auf sich selbst zu beziehen.

                      Ich vermute, du hast mit x und y eher Tabellen gemeint, und nicht Datensätze? Also präzise: Sei T die Tabelle und a..z die Datensätze, dann suchen wir eine Relation T.x<->T.y, und genau das habe ich doch beschrieben.

                      Mag ja sein, dass Du eine andere Definition von Beziehungen zwischen Tabellen meinst, als die von Codd, aber typischerweise gibt man die doch zwischen Spalten von zwei (oder mehr) Tabellen an, und nicht zwischen Datensätzen.

                      Und wenn sich nun die Beziehung von T.Name <-> T.Name (oder auch T.ID<->T.ID) ergibt, dann gibt das für die Kreuztabelle eben ein Problemchen.

                      Liebe Grüße aus dem schönen Oberharz

                      Tom vom Berg

                      --
                      Nur selber lernen macht schlau
                      http://bergpost.annerschbarrich.de
                      1. yo,

                        die diskusion geht ein wenig in die falsche richtung. aber erst noch mal ein hinweis (aus martings beitrag), eine relation ist im kontex von rdms keine beziehung zwischen zwei entitäten, sondern eine relation ist eine tabelle. die beziehung wiederum wird durch die bezeichnung relationship ausgedrückt.

                        und wenn man die beziehungen zwischen zwei entitäten betrachtet (ganz genau handelt es sich um entitätstypen), dann kann da noch gar keine rede von tabellen sein. welche technik letztlich zum einsatz kommt, das wird er später geklärt. betrachten tut man in dieser phase aber erst einmal die beziehung zweier entitätstypen und das jeweils aus den beiden sichtweisen. dabei spielt es auch keine rolle, dass es sich letztlich zweimal um den gleichen entitätstyp handelt.

                        und es kommt noch ein aspekt dazu. wie genau letzlich das daten-design aussieht ist ganz individuell, sprich abhängig vom umfeld. was bei dem einen richtig ist, kann im anderen zusammenhang falsch sein. zudem stellt ein daten-design nicht eine vollkommende integritätsprüfung dar. das peter der freund von peter sein kann, liegt in der natur der sache, egal ob nun 1:n oder n:m beziehung. wenn das ausgeschlossen werden soll, dann nicht durch das daten-design, sondern durch andere methoden (applikation, trigger, etc.).

                        Ilja

                    2. Hallo

                      »» »» »» Das wäre hier eine Beziehung x<->x, also ein Selbstbezug.
                      »» »» also ist Harry der Freund von Harry?
                      »» siehe Datenmodell unter https://forum.selfhtml.org/?t=187360&m=1245211

                      hab ich gelesen und verstanden. Also doch x<->y und nicht x<->x. Letzteres wäre ja auch irgendwie sinnlos - einen Datensatz auf sich selbst zu beziehen.

                      Mal abgesehen, dass ich auch nur ein "DB-Stümper" bin und somit das, was ich geschrieben habe, nicht als der Weisheit letzter Schluss gelten darf, sollte mMn die x<->y-Relation gewahrt bleiben. Einerseits kann es sein, dass jemand, der als Freund erwählt wurde, dies garnicht wünscht (die Frage hattest du ja auch schon aufgeworfen) und andererseits würde ich im Datenmodell schon auseinanderhalten wollen, wer der aktive (in eurem Schema "x") und wer der passive Part ("y") war. "x<->x" sollte sich programmiertechnisch ausschließen lassen, alles andere, wie besprochen, per Unique Index.

                      Ich habe nur die Befürchtung, dass wir mit der Diskussion Simon bei weitem überfordern. Er möge das nicht persönlich nehmen, aber die Art der Fragestellung lässt mich vermuten, dass er keine praktische Erfahrung mit Datenbankdesign hat. Solange er sich jedoch nicht zurückmeldet, bleibt das eine nur für uns fruchtbare Diskussion. Mir hat die Fragestellung mitsamt sich den daraus ergebenden Ansätzen jedenfalls gefallen.

                      Tschö, Auge

                      --
                      Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
                      Terry Pratchett, "Wachen! Wachen!"
                      Veranstaltungsdatenbank Vdb 0.3
  3. Hallo

    ich würde gern auf einer Seite so etwas machen, dass man andere User als Freunde eintragen kann, nur weiß ich nicht wie ich das mit der DB machen soll.
    Ich hab derzeit eine DB die die Daten des Users speichert, d.h. Passwort, Username, usw.

    Ich hoffe ihr versteht was ich meine,

    Du brauchst eine weitere DB-Tabelle. Diese hat zwei Spalten, eine, in der die ID des Benutzers, der Freunde erwählt, enthält und eine, in der die Benutzer-ID des Freundes gespeichert wird. Beide IDs entsprechen denen aus der Datenbanktabelle, die die Benutzerdaten enthält.

    Benutzerdatentabelle:

    id | name | email | ...
      1|Simon | ...   | ...
      2|Franz | ...   | ...
      3|Willy | ...   | ...
      4|Andre | ...   | ...

    Freundeslistentabelle (id_b= ID des Benutzers, id_f= ID des Freunds):

    id_b | id_f
        1|    3 /* Simon hat Willy zum Freund */
        3|    4 /* Willy hat Andre zum Freund */
        1|    2 /* Simon hat Franz zum Freund */
        4|    2 /* Andre hat Franz zum Freund */
        2|    1 /* Franz hat Simon zum Freund */
        2|    4 /* Franz hat Andre zum Freund */

    Tschö, Auge

    --
    Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
    Terry Pratchett, "Wachen! Wachen!"
    Veranstaltungsdatenbank Vdb 0.3