GUID vs Identität zur Verwendung mit Tags

8

Ich weiß, dass dieses Thema ausführlich diskutiert wurde (ich habe viele Beiträge hier und im Internet gelesen) und ich mag es nicht, ein totes Pferd zu prügeln, aber ich habe eine Frage zu einem spezifischeren Aspekt von Integer ID vs GUID:

Ich schreibe ein Schema aus, das eine Tagging-Fähigkeit haben wird, die den Stackoverflow-Tags ähnlich ist, aber es werden die gleichen Tags verwendet, die für mehr als 5 verschiedene Tabellen verwendet werden.

Die grundlegenden Tabellen, die ich verlinken werde, sind wie folgt:

Tag-Tabelle

%Vor%

Elemente Tabelle 1

%Vor%

Das Bit, mit dem ich Probleme habe, ist die Tabelle tag_item .

Ich werde 5 Tabellen mit völlig verschiedenen Strukturen haben, auf die die Benutzer Tags anwenden können, also denke ich, dass ich einen der folgenden Schritte ausführen muss:

  • Speichern Sie table name / table number sowie den Ganzzahlschlüssel der Zeile, auf die sich das Tag bezieht
  • Speichern Sie GUID der Zeile, dies funktioniert unabhängig von der Tabelle und macht es viel einfacher, alle Tags für eine bestimmte Zeile zu erhalten.

Was ich nicht weiß, ist, wie sich dies auf die Leistung auswirkt:

  • Suche nach allen Elementen über 5 Tabellen mit einem bestimmten Tag / Tags
  • Bearbeiten der Tags für einen Artikel
  • verbindet

Gibt es in diesem Fall oder an einem anderen Ort, an dem ich die Vorteile in diesem speziellen Szenario nachlesen könnte, eine deutlich bessere Option?

Bearbeiten:

Für alle Interessierten, unten ist das Schema, das ich beschlossen habe:

Tabelle für Tags

%Vor%

Tabelle für Tag_Items

%Vor%     
bendataclear 15.10.2012, 16:09
quelle

2 Antworten

9

Ich werde (vielleicht nicht hilfreich) vorschlagen, dass GUID vs ID die falsche Frage ist, auf die ich mich konzentrieren muss. Die Annahme, dass Sie eine einzelne Tabelle benötigen, die Tags mit Elementen verknüpft, kann sich zunächst untersuchen lassen.

Wenn Ihre fünf Positionskategorien unterschiedlich genug sind, um unterschiedliche Tabellen zu benötigen, sollten Sie fünf Tag_item-Verknüpfungstabellen berücksichtigen - eine für jede Elementtabelle. Obwohl der Code, um sie alle auf einmal abzufragen (mit UNION ALL , um die Ergebnisse zu verketten) etwas ausführlicher und repetetiver als der Code für eine einzelne Link-Tabelle ist, sind die Abfragen wahrscheinlich wesentlich einfacher - gut von beiden eine Wartung und eine Abfrageplanperspektive.

Die andere Alternative wäre, die allgemeinen Attribute, die die fünf Item-Kategorien gemeinsam haben, in eine zentrale Tabelle umzuwandeln (an die die Tags gebunden sind) und die zusätzlichen nicht-gemeinsamen Attribute in fünf untergeordneten Tabellen zu speichern. Es ist schwierig zu wissen, ob dies ohne weitere Informationen darüber, wie die vorhandenen Daten derzeit verwendet werden, angemessen ist.

    
Ed Harper 29.05.2013 11:29
quelle
1

Obligatorisch möglich Tagging-Design-Duplikat

Je nachdem, wie Sie die Tags verwenden möchten und welche Leistungsmerkmale wichtig sind, ist eine Hash-Kombinationstabelle eine mögliche Alternative zur map / link-Tabelle.

Berechnen Sie den Hashwert einer bestimmten angeforderten Kombination von Tags und speichern Sie diesen direkt in Ihren vorhandenen Tabellen und in der Kombinationstabelle.

Wenn Sie nach etwas suchen, das eine Untermenge von Tags ist, wird es vielleicht ziemlich hacky, da Sie eine Menge Speichertransformationen all dieser Hashes machen. Vielleicht gibt es eine sauberere Möglichkeit, gehashte Referenzwerte dort herauszufragen, wie ich mich nicht erinnern kann, und habe bei einer Suche nicht sofort etwas gefunden.

    
JustinC 05.06.2013 02:44
quelle

Tags und Links