web-dev-qa-db-ja.com

Joomlaがコアテーブル構造で外部キーを使用しないのはなぜですか?

カスタムコンポーネントを開発していて、#__users(id)を参照する外部キーuser_idを使用したい。 Joomlaは、コアテーブルで#__user_notesuser_profilesなどの外部キーを使用していないことに気付きました。

記事にコメントを追加するための拡張機能を作成したいとします。テーブルの構造は次のようになります。

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 */
);

今私は2つのオプションがあります:

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

そして

, KEY `idx_userid` (`user_id`)

あなたの提案は何ですか?カスタムコンポーネントで外部キーを使用するかどうか。なぜ?

6
Farahmand

もちろんJoomlaは外部キーを使用して他のテーブルの主キーを参照します。これはデータベースの基本概念であり、それ以外では機能しません。

どういう意味ですか。それらはデータベースレベルで整合性を維持するためにそれらをバインドすることについて話している。たとえば、プライマリテーブルの行が削除されると、「子」テーブルの行も自動的に削除されます。プライマリを削除できるのは、すべての子が最初に削除された場合のみです。それはそれがどのように設定されているかに少し依存します。これは「参照整合性」と呼ばれます。

Joomlaでは、参照整合性を使用しません。代わりに、アプリケーションレベルでデータを正常に保ちます。さまざまなプラグインイベントを使用して、削除または変更された状態などをキャッチし、それに応じて動作させることができます。

3
Bakual

InnoDBストレージエンジンのみが外部キー定義を許可し、MyISAMテーブルのみをサポートするサーバーにJoomlaをインストールできるためです。

したがって、パブリックコンポーネントの場合は、テーブル構造で外部キーを使用しないことをお勧めします。

2
Farahmand