Beste Beziehungen zwischen einem Tisch und einigen anderen Tabellen, jede von ihnen in Abhängigkeit von n Datensätze der ersten Tabelle? [Duplikat]

StackOverflow https://stackoverflow.com/questions/328123

  •  11-07-2019
  •  | 
  •  

Frage

Ich habe eine Tabelle, die Kommentare für eine abwechslungsreiche Reihe von Inhaltstypen spart. Diese werden in anderen Tabellen gespeichert (Nachrichten, Artikel, Benutzer). Ich frage mich, was ist der beste Weg, um diese Tabellen zu verbinden? In früheren Projekten habe ich eine zweite Tabelle für jede Art von Inhalten. Sie hielten die ID des bestimmten Gehalt an ids der Kommentare Tabelle abgebildet. Also für jeden Kommentar hatte ich den Kommentar Eintrag selbst und einen ‚Anschluss‘ Eintrag. Eine Alternative wäre eine separate Kommentare Tabelle für jede Art von Inhalt zu verwenden. Am Ende enthalten beiden Wege eines gewissen Redundanz Fehler.

Also welche soll ich verwenden oder gibt es die eine Lösung?

War es hilfreich?

Lösung

Es gibt ein paar offensichtlichen Möglichkeiten, um Ihre Tabelle zu entwerfen:

1) Sie haben eine Master-Kommentare Tabelle und Zwischen Tabellen jeden Kommentar zu Ihrem Artikel, News zu verbinden und Benutzer Tabellen:

Comments
--------
ID

News      NewsComments
----      ------------
ID        NewsID
          CommentID

Articles  ArticleComments
--------  ---------------
ID        ArticleID
          CommentID

Users     UserComments
-----     ------------
ID        UserID
          CommentID

Vorteil dafür ist die relative Leichtigkeit der Kommentare zu den einzelnen Funktionen abfragt. Jedoch leidet diese Art von referentielle Integrität: seine möglich, einen einzigen Kommentar auf mehrere Kommentare, News-Artikel, und Benutzer zu verbinden. Darüber hinaus ist es nicht sehr skalierbar., Wenn Sie Kommentare hinzufügen für RSS-Feeds, die Favoriten-Links, Benutzerstatus, etc., dann haben Sie Zwischentabellen für alle diese Typen

2) Ein weiterer Ansatz ist eine leicht denormalized Version:

Comments
--------
ID
TableName
PkID (Connects the primary key in other tables)

News
----
ID  

Articles
--------
ID

Users
-----
ID

Das funktioniert und es leicht skalierbar, wenn Sie neue Funktionen hinzufügen, aber Sie können Ihre Comments.RefID Feld, um mehrere Tabellen gleichzeitig nicht Schlüssel, so dass Sie verlieren referentielle Integrität.

3) Die letzte Option erfordert viele redundante „Kommentare“ Tabellen für jede Funktion.

News      NewsComments
----      ------------
ID        NewsID

Articles  ArticleComments
--------  ---------------
ID        ArticleID

Users     UserComments
-----     ------------
ID        UserID

Der Vorteil dieser Art ist die Erhaltung der referentiellen Integrität, und dass seine leicht understanable jeder in Ihrem Schema sucht. Nachteilig ist die übermäßige Anzahl von Tabellen mit einem identischen Schema.

Andere Tipps

Ich würde wahrscheinlich eine separate Kommentar Tabelle für jeden Inhaltstabelle hat, so dass ich die Vorteile der Fremdschlüsselbeziehungen nehmen könnte, um automatisch Updates zu verwalten / löscht, wenn der ursprüngliche Inhalt geändert / gelöscht werden. Also, wenn ich Nachrichten und Artikel Tabellen hatte, dann würde ich news_comments und article_comments Tabellen hat. Jeder von ihnen hätte ein content_id Feld und ein user_id Feld. Das content_id Feld würde zum Inhalt siehe Tabelle zurück und User_id Feld würde die Benutzer-Tabelle verweisen. Ich hatte Fremdschlüsselbeziehungen zwischen den entsprechenden Inhalt und Kommentartabelle und die Benutzer und jeder Kommentar Tabelle und haben die Veränderungen auf Update propagieren einrichten / löschen. Vielleicht haben Sie auch so auf die ID-Felder einrichten Indizes möchten, dass Sie Index tun, zwischen ihnen verbindet.

Wenn Sie eine einzelne Kommentare Tabelle haben, würden Sie die Beziehungen manuell in Code verwalten müssen, anstatt die DB es für Sie übernehmen -., Da Sie nur die FK beziehen sich auf einen anderen Tisch haben kann

Eine weitere Möglichkeit könnte sein:

Comments
-------
ID
NewsID
ArticleID
UserID

Für jede Zeile nur würde man nicht Null sein. Dies würde Abfragen einfacher als mit den Zwischentabellen.

Aus der Sicht der Datenintegrität jedoch wäre es klüger, eine Kommentar Tabelle Tabelle für jeden Inhalt zu haben.

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