it-swarm.com.de

Warum verwendet Joomla keine Fremdschlüssel in den Kerntabellenstrukturen?

Ich entwickle eine benutzerdefinierte Komponente und möchte einen Fremdschlüssel user_id Verwenden, der auf #__users(id) verweist. Ich habe festgestellt, dass Joomla in seinen Kerntabellen keinen Fremdschlüssel verwendet, zum Beispiel in #__user_notes Oder user_profiles.

Angenommen, ich möchte eine Erweiterung zum Hinzufügen von Kommentaren zu Artikeln erstellen. Die Struktur der Tabelle ist wie folgt:

CREATE TABLE IF NOT EXISTS `#__comp_comments` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `user_id` int(20) unsigned NOT NULL,
    `comment` text,
    PRIMARY KEY (`id`)
    /* PLACEHOLDER */
);

Jetzt habe ich zwei Möglichkeiten:

, FOREIGN KEY (`user_id`) REFERENCES `#__users`(`id`) ON UPDATE CASCADE ON DELETE CASCADE

und

, KEY `idx_userid` (`user_id`)

Was ist dein Vorschlag? Verwenden Sie Fremdschlüssel in benutzerdefinierten Komponenten oder nicht? Und warum?

6
Farahmand

Joomla verwendet natürlich Fremdschlüssel, um auf Primärschlüssel in anderen Tabellen zu verweisen. Das ist ein grundlegendes Konzept in Datenbanken und es würde sonst nicht funktionieren.

Was Sie meinen, ist etwas anderes. Sie sprechen davon, sie zusammenzubinden, damit die Integrität auf Datenbankebene erhalten bleibt. Wenn beispielsweise eine Zeile in der Primärtabelle gelöscht wird, werden die Zeilen der "untergeordneten" Tabellen ebenfalls automatisch gelöscht. Sie können die primäre Tabelle nur löschen, wenn alle untergeordneten Tabellen zuerst gelöscht werden. Das hängt ein bisschen davon ab, wie es eingerichtet ist. Dies wird als "referentielle Integrität" bezeichnet.

In Joomla wird die referentielle Integrität nicht verwendet. Stattdessen behalten wir unsere Daten auf Anwendungsebene bei. Mit verschiedenen Plugin-Ereignissen können Sie einen Lösch- oder Änderungsstatus oder was auch immer abfangen und entsprechend handeln.

3
Bakual

Da nur die InnoDB-Speicher-Engine Fremdschlüsseldefinitionen zulässt und Joomla auf Servern installiert werden kann, die nur MyISAM-Tabellen unterstützen.

Für eine öffentliche Komponente ist es daher besser, Fremdschlüssel in Tabellenstrukturen zu vermeiden.

2
Farahmand