Empfohlene Tabelle einrichten für ein bis viele / viele zu einer Situation
-
06-09-2019 - |
Frage
Ich brauche ein Skript zu erstellen, wo jemand eine Öffnung für eine Position abgeben wird, und wer berechtigt ist, wird die Öffnung aber jeden sehen, wer nicht (oder entscheidet sich aus) ist die Öffnung nicht sehen. So zwei Menschen auf die gleiche Seite gehen und unterschiedliche Inhalte sehen, einige möglicherweise die gleiche, etwas völlig einzigartig. Ich bin mir nicht sicher, dass die beste Art und Weise, dass die Daten in einer MySQL-DB / Tabelle zu ordnen.
Zum Beispiel, ich könnte es durch die Entsendung angeordnet haben, aber das würde aussehen Art wie:
PostID VisibleTo
PostingA user1,user2
Und das scheint falsch (den CSV-Stil in der Spalte). Oder ich könnte mit von Person gehen:
User VisiblePosts
user1 posting1, posting2
Aber es ist das gleiche Problem. Gibt es eine Möglichkeit die Benutzer des einzigartigen, die Entsendung einzigartig zu machen, und haben sie nur verbinden, in dem sie übereinstimmen?
ist die Entscheidung zunächst, indem Sie eine Reihe von Anfragen an einen anderen Satz von Tabellen aus, aber sobald das ausgeführt wird, scheint es ineffizient, dass einige Stück Code wieder laufen zu lassen und wieder, wenn es nicht, nachdem der Benutzer Beiträge ändern die Position.
... Am zweiten Gedanken, es könnte sich ändern, aber wenn wir sie nicht davon ausgehen, (da es unwahrscheinlich ist, und so wenig Konsequenz, wenn ein Benutzer etwas sieht, dass sie nicht mehr kommen für), ist es ein Standard Lösung für dieses Szenario?
Lösung
Dies ist ein many-to-many-Beziehung oder n. M Beziehung
Sie würde eine zusätzliche Tabelle erstellen, sagen PostVisibility
, mit einer Spalte PostID
und UserID
. Wenn eine Kombination von PostID
und UserID
in der Tabelle vorhanden ist, dass Post ist sichtbar für den Benutzer.
Andere Tipps
Drei Tische ...
Benutzer: [Benutzeridentifikation] [OtherField]
Beitrag: [PostID] [OtherFields]
UserPost: [Benutzeridentifikation] [PostID]
User.UserId UserPost.UserId tritt, Post.PostId schließt sich an UserPost.PostId
Dann die Tabelle UserPost nachzuschlagen, zu Post AG zusammen, wenn Sie auswählen, welche Beiträge zeigen
Edit: Sorry, ich glaube, Sie in der Veröffentlichung Platz-Begriffe sprechen, die viele-zu-viele sind. Ich war in Bezug auf die Posting einen "Blick Rechte" terms of nachgedacht, die eine Eins-zu-viele ist.
Es sei denn, ich bin etwas fehlt, das ist eine Eins-zu-viele-Situation, die zwei Tabellen benötigt. Z. B. hat jeder Eintrag n Benutzer, die sie sehen können. Buchungen sind einzigartig für einen einzelnen Benutzer, so brauchen Sie nicht das Gegenteil zu tun.
-
PostingTable mit Veröffentlicher (und anderen Daten)
-
PostingVisibilityTable mit Veröffentlicher und Benutzer-ID
-
Usertable mit UserID und Benutzerdaten
Erstellen Sie die Nachrichten unabhängig von ihrer Sichtbarkeit Rechte, und dann separat hinzufügen / entfernen Veröffentlicher / UserID Paare gegen die Sichtbarkeit Tabelle.
Um alle Nachrichten auszuwählen sichtbar für den aktuellen Benutzer:
SELECT * FROM PostingTable A INNER JOIN PostingVisibilityTable B ON A.PostingID = B.PostingID WHERE B.UserID = "currentUserID"