1

まず第一に、英語は私の母国語ではありません。私の質問を自由に編集してください。気分を害する可能性のある間違いや、問題を明らかにしていないことをお詫びします。

多数の結合を含む SQL クエリがいくつかあります。これらの結合は、クラスター化されたインデックスに基づいています (心配する必要はありません)。一部の結合は、正規化を尊重するためだけに使用され、メンテナンスが直感的であるためです。ただし、一部をスキップできる場合もあります。ベスト プラクティスの観点から、これらの結合について何をすべきかは明確ではありません。

編集:

簡単な例:

select *
from things
join things_categories on
    things_categories.id_thing = things.id_thing
join categories on
    categories.id_category = things_categories.id_category
join categories_properties on
    categories_properties.id_category = categories.id_category
where
    categories_properties.bo_default = 1

しかし、それは可能です:

select *
from things
join things_categories on
    things_categories.id_thing = things.id_thing
join categories_properties on
    categories_properties.id_category = things_categories.id_category
where
    categories_properties.bo_default = 1

2番目の結合は必要ありません(データベースレベルで整合性があります)。コードをより直感的にし、データベースの正規化を尊重するためだけに存在します。正規化を尊重してコードをより直感的にするために、可能な限り最小で効率的なパスをたどるべきか、不要な結合を残すべきかはわかりません。

任意のヒント?

ではごきげんよう。

4

3 に答える 3

1

あなたがすでに誠実さを持っているかどうかにかかわらず、それは依存します。

一方では、に が含まれcategories_properties tableている場合、整合性が存在し、でを作成する必要はありません。foreign keyid_category columnjoincategories table

一方、整合性が存在しない可能性がある場合 (つまり、で定義されていないid_categoriesが存在する場合)、 を作成する必要があります。categories_properties tablecategories tablejoin

于 2012-05-11T15:45:26.050 に答える
1

結合が必要ない場合は使用しないでください。まったく不要なパフォーマンス ヒットが発生しています。必要のない作業をデータベースに強制しないでください。より完全に見えるからです。クエリでは、読みやすさよりもパフォーマンスを考慮する必要があります。結局のところ、パフォーマンスの高い SQL コードを書き始めると、より読みやすくなります。ただし、クエリの両方のバージョンが同じ結果セットを返すことを確認して、削除する前に実際に必要ないことを確認してください。

于 2012-05-11T19:53:59.190 に答える