Warum erfordert get_term () Taxonomie? Sind term_ids nicht eindeutig?

8

In einer verwandten WPSE-Frage wird gefragt, wie der Begriff nur durch Angabe der ID ohne Angabe der Taxonomie ermittelt werden kann. Meine Frage ist philosophischer. Im Allgemeinen gibt es Dinge im WP-Kern aus einem bestimmten Grund. Ich versuche zu verstehen, warum term_id nicht der Primärschlüssel für den Begriff sein kann - warum brauchen wir auch die Taxonomie? Kann ein einzelner Termdatensatz Mitglied mehrerer Taxonomien sein? Das wird derzeit in der API sicherlich nicht unterstützt. Gibt es einen Anwendungsfall, in dem dies wünschenswert sein könnte?

Oder stammt der erforderliche $taxonomyParameter in get_term()einem Rest aus einer früheren Inkarnation der Datenbankstruktur?

Tom Auger
quelle
3
Ich bin mir nicht ganz sicher, aber ich denke, es ist eher ein Leistungsproblem, da das Taxonomiefeld der wp_term_taxonomyTabelle als Index für diese Tabelle verwendet wird, wodurch die Abfrage schneller wird (auch wenn es sich nur um einen Begriff handelt).
Bainternet
@Bainternet Bitte schauen Sie sich das Ende meiner A. EXPLAINsagt term_id.
Kaiser
1
Ich denke, es ist ein Überbleibsel. Protokollieren eines Tickets mit Trac: core.trac.wordpress.org/ticket/20536
Tom Auger

Antworten:

3

Ich habe ein Ticket dagegen mit trac angemeldet: http://core.trac.wordpress.org/ticket/20536

Es stellt sich jedoch heraus, dass dies vorerst notwendig ist, da WordPress derzeit (seit 2.x) einen Fehler aufweist, der zwei Begriffe mit demselben Namen derselben term_id zuordnet! Es ist also möglich (wenn auch falsch), dass ein einzelner Begriff mehr als einer Taxonomie zugeordnet wird. Siehe diesen Fehler: http://core.trac.wordpress.org/ticket/5809

Es ist ziemlich weitreichend, daher muss die Implementierung des Fixes sehr gründlich getestet werden. Ich werde versuchen, mich daran zu erinnern, diese Frage zu aktualisieren, wenn es Entwicklungen gibt.

Tom Auger
quelle
Dies ist definitiv der Fall! Dieser Fehler hat mich bei einer großen (mehrere hundert) Multisite-Installation gebissen ... Sehr seltsam. UND beachte, dass der Fehler 5 Jahre alt ist ... Der Patch soll jedoch in die Version 3.6 aufgenommen werden, sodass dies möglicherweise tatsächlich behoben wird! (Endlich! :))
Rinogo
Vielen Dank, dass Sie diese Frage aktualisiert haben, um die richtige Antwort zu finden, Tom! Hoffentlich hilft dies denen, die in Zukunft auf dieser Frage landen. Und danke für die Antwort / Links. Sehr hilfreich.
Rinogo
1
Erinnerung an die Aktualisierung dieser Frage - übrigens, gab es nicht etwas mit Begriff Alias ?
Kaiser
Hallo @kaiser, aktualisiere es mit was? Ich bin mir nicht sicher, ob es weitere positive Bewegungen in Richtung einer Lösung der genannten Trac-Probleme gegeben hat.
Tom Auger
Derzeit ist das Ziel auf 3,7-früh eingestellt . Mal sehen was passiert. Was fehlt? Konnte am Ende nicht ganz folgen, da es einen Unit-Test von dem gab, was ich gelesen habe.
Kaiser
1

Warum brauchen wir auch die Taxonomie? Kann ein einzelner Termdatensatz Mitglied mehrerer Taxonomien sein?

Nein. Begriffe haben Slugs zur Unterstützung von Begriffsarchiven. Und wenn die Schnecken zweimal vorhanden sind, werden in einigen Permalink-Szenarien viele Minenfallen oder "Wontfixes" angezeigt.

Gibt es einen Anwendungsfall, in dem dies wünschenswert sein könnte?

Ja: Stellen Sie sich vor , dass Sie Begriffe für zB haben sizeund drei Taxonomien genannt haben length, width und height(Sie können auch über Farben denken könnte). Dies wird jedoch aus den oben genannten Gründen nicht unterstützt.

Im Allgemeinen gibt es Dinge im WP-Kern aus einem bestimmten Grund. Ich versuche zu verstehen, warum term_id nicht der Primärschlüssel für den Begriff sein kann - warum brauchen wir auch die Taxonomie?

Vom Betrachten der Tabelle und Ausführen eines EXPLAIN, term_id ist der Primärschlüssel. Ich denke, auf größeren Systemen ist es möglicherweise schneller, taxonomiespezifische Begriffe nur mit einem (langsamen) Join abzufragen, als alle abzufragen, zu sortieren und zu filtern, was Sie benötigen.

Kaiser
quelle
Nach den Geräuschen der Dinge ist es dann entweder fehlerhaft vorhanden (möglicherweise vom vorherigen Schema übrig geblieben) oder es ist für einen zukünftigen Fall vorhanden, in dem Sie möglicherweise doppelte Schnecken haben dürfen (unwahrscheinlich). Ich bin mir jedenfalls nicht sicher, ob Sie meine Frage beantwortet haben.
Tom Auger
@ TomAuger "Gibt es einen Anwendungsfall, in dem dies wünschenswert sein könnte?": Ja. Aber das Gegengewicht wiegt mehr. Ein Begriff in Steuer A kann denselben Namen wie ein Begriff in Steuer B haben, aber beispielsweise eine andere Bedeutung haben. Wenn Sie also "Gewicht" in Taxonomien "Wichtigkeit" und "Versandkosten" abfragen, was würde dann "wirklich schwer" bedeuten?
Kaiser
Ja, aber hier geht es um den Begriff ID, nicht um den Begriff NAME. Die ID unterscheidet den Begriff bereits vollständig von jedem anderen Begriff (in welcher Taxonomie auch immer), der möglicherweise denselben Namen hat. Beachten Sie, dass dies weniger eine Datenbankfrage ist als vielmehr, warum sie im Kerncode belassen wurde.
Tom Auger
@ TomAuger Es wäre einfacher gewesen, wenn Sie diese Frage Ende Dezember befolgt hätten. Ich hätte jetzt wieder daran gearbeitet: /
kaiser