3
リレーショナルデータベースの整合性の制約-見落とすべきですか?
大規模なクエリを高速化し、より良い結果を得るには、リレーショナルデータベースで(FOREIGN KEY制約定義を介して)関係の強制を取り除く方が良いと言うので、私は私が働いている会社の開発者と恒久的に話し合っています。パフォーマンス。 検討中のプラットフォームはMySQL 5.xであり、FOREIGN KEYがセットアップされておらず、関連するテーブルの一部のPRIMARY KEY制約が欠けていても、少なくとも私にとっては妥当ではありません。多分彼らは正しいのですが、私は間違っていますが、私はこの状況について議論するのに十分な議論がありません。 これは3年間、推奨されるアプローチでした。私はこの会社の新人です(わずか1か月)が、製品が「機能する」ため、データベースを拡張するのにためらいがあります。それにもかかわらず、最初に気付いたのは、1ページの読み込みに1分(はい、60秒!)かかっていることです。 現在の状況の背後にある主張の1つは、「非正規化された」データベースは正規化されたデータベースよりも速いということですが、私はそれが本当だとは思いません。 関連するクエリのほとんどにJOIN操作が含まれているため、大量のデータがあると非常に遅くなります(データベースには数百万の行が含まれます)。 通常、「CRUD」操作の処理は、アプリケーションプログラムコードレベルで実装されます。たとえば、FROMからデータを削除するには、次のようにしましょうTableA: との行の間に何らかの関係があるかどうかをその場で最初に確認する必要がTableAありますTableB。 上記の関係が「検出」された場合、アプリプログラムコードは関連する行の削除を許可しませんが、 何らかの理由でアプリのプログラムコードが失敗した場合、関連する行とテーブルに関係があるかどうかに関係なく、DELETE操作は「成功」します。 質問 議論を深めるために、私が良い、正確で確固とした答えを詳しく説明するのを手伝っていただけませんか? 注:たぶん、このようなものは以前に尋ねられた(そして答えられた)かもしれませんが、Googleを使用して何も見つけることができませんでした。