Frage

Ich hoffe, jemand kann meinen Titel bearbeiten, um besser zu beschreiben, was ich meine, weil ich nicht genau weiß, wie dies genannt würde. Betrachten Sie jedoch dieses Setup: Ich möchte ein Benachrichtigungssystem erstellen, bei dem eine Nachricht einem Benutzer angezeigt wird, bis er auf "Entlass" klickt. Ich muss mich dann "erinnern", dass dieser Benutzer die Benachrichtigung abgewiesen hat, damit ich sie ihm nicht wieder zeige. Hier ist meine aktuelle Lösung

  • users Tabelle hat a uid Primärschlüssel und Benutzerinformationen
  • notifications Tabelle hat a nid Primärschlüssel- und Benachrichtigungstext
  • notifications_seen Tabelle mit zwei Spalten, uid und nid

Wenn jemand auf eine Benachrichtigung klickt, speichere ich seine uid und die Benachrichtigung nid in notifications_seen. Dies scheint gut zu funktionieren, aber Phpmyadmin hat riesige rote Nachrichten, die mir das sagen notifications_seen hat keinen Index. Keine Säule ist jedoch einzigartig. Soll ich wirklich eine äußerst nutzlose Kolumne haben notifications_seen Und nennen Sie das einen Primärschlüssel? Gibt es einen besseren Weg, dies zu tun?

War es hilfreich?

Lösung

Sie können mehr als eine Spalte verwenden, um Ihren Primärschlüssel zu erstellen. In diesem Fall sollten Sie NID und UID als Hauptschlüssel in Ihrer Tabelle "Benachrichtigungen" festlegen. Die Idee hier ist, dass, obwohl weder NID noch UID in Ihrer Tabelle von Benachrichtigungen eindeutig sind. Das NID/UID -Paar ist einzigartig. Sie sollten diesen beiden Spalten eine primäre Schlüsselbeschränkung hinzufügen. Dies ist normalerweise das, was Sie für diese Art von Situation tun möchten.

Es gibt Zeiten, in denen Sie möglicherweise tatsächlich eine automatische Inkrementzeile erstellen möchten, um den Primärschlüssel zu vereinfachen. Wenn Ihr bester Kandidatenschlüssel beispielsweise aus vielen Spalten besteht (ich ziehe dies aus der Luft; sagen wir jedoch 4 oder mehr Spalten), oder Sie haben Spalten, die Zeichenfolgen enthalten. Das wäre langsamer zu passen, wenn sie nach Suchanlagen ausgehen. Für diese Situation sollte jedoch nur die primäre Schlüsselbeschränkung zu den beiden Spalten hinzugefügt werden.

Primärschlüssel werden standardmäßig indiziert; Aus diesem Grund sollten Sie den beiden Spalten einfach die primäre Schlüsselbeschränkung hinzufügen. Dadurch erhalten Sie auch die Integrität Ihrer Daten, indem Sie sicherstellen, dass Sie nicht versehentlich Zeilen mit demselben UID/NID -Paar einfügen.

Sie sollten auch eine fremde Schlüsselbeschränkung in der UID in die ID in der Benutzertabelle und eine fremde Schlüsselbeschränkung für die NID in der ID in der Benachrichtigungs -Tabelle hinzufügen. Durch das Hinzufügen der fremden Schlüsselbeschränkungen wird sichergestellt, dass Sie keine UIDs oder NIDs einfügen, die nicht tatsächlich in Ihre Benachrichtigung existieren.

Andere Tipps

Möglicherweise können Sie einen zusammengesetzten Primärschlüssel erstellen (bestehend aus beiden uid und nid).

Sie könnten einen Index machen notifications_seen das beinhaltet beide Säulen! Oder erstellen Sie eine separate Spalte nur für einen Primärschlüssel oder tun Sie beides - mit einem Index eingeschaltet uid und nid könnte Beschleunigen Sie die Abfragen (aber machen Sie sich darüber keine Sorgen, bis Sie wichtige Leistungsprobleme bemerken - denken Sie daran für die Zukunft). Es ist keine schreckliche Sache, einen Hauptschlüssel für diese n: n -Beziehungen zu haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top