TL; DR 必要ありません 「関係」、つまりクエリする外部キー(FK)を宣言します。しかし、それは良い考え 。その場合、FKは主キー(PK)を参照できますまたは その他のUNIQUE列。
PKとFKは、一部の方法や製品では誤って「関係」と呼ばれています。アプリケーションの関係は、テーブルで表されます。 。 (ベーステーブルとクエリ結果。)PKとFKは制約です。これらは、特定の状況のみが発生する可能性があることをDBMSに通知するため、特定のエラーが発生したときに通知できます。それらは関係ではなく、すべてのデータベースの状態とアプリケーションの状況に当てはまるステートメントです。 データベースを更新およびクエリするための制約を知る必要はありません。
すべてのテーブルの意味を知ってください 。 基本テーブルには、行の意味を示すDBA指定の意味があります。クエリには、行の意味を示す意味もあります。クエリの意味は、ベーステーブルの値と条件から結果値がどのように結合されるかと並行して、ベーステーブルの意味から結合されます。
-
image_tbl
--画像[Id]は[albumName]という名前のアルバムにあり、[name]という名前で、[dateTime]の日付で、コメント[comment]があります -
album_tbl
--アルバム[albumID]の名前は[albumName]
持っていない PK / UNIQUEまたはFKを宣言します!しかし、それは良い考え その場合、DBMSは不可能/誤った更新を許可しない可能性があるためです。 PK / UNIQUEは、その列のサブ行の値は1回だけ表示する必要があることを示しています。 FKは、その列のサブ行値は、参照されるテーブルにPK/UNIQUEサブ行値として表示される必要があると述べています。これらの制限がベーステーブルに適用されるという事実は、特定の制限がクエリ結果に適用されることを意味します。ただし、これらのクエリ結果の意味は、これらの制限とは関係なく、クエリのテーブルと条件の組み合わせごとに異なります。たとえば、アルバム名が一意であるかどうか
-
image_tbl JOIN album_tbl USING albumName
--画像[Id]は[albumName]という名前のアルバムにあり、[name]という名前で、[dateTime]の日付で、コメント[comment]があり、アルバム[albumID]は[albumName]という名前です
ここでの唯一の問題は、アルバム名が一意でない場合、画像のアルバム名を知っていても、それがどのアルバムに含まれているかがわからないことです。あなたはそれがその名前のアルバムにあることを知っているだけです。一方、アルバム名が一意の場合は、album_tblalbumIDは必要ありません。
したがって、アルバム名が一意である場合は、album_tblでalbumNameUNIQUEを宣言します。次に、image_tblで、album_tblのPK/UNIQUE列によってアルバムを識別します。 album_idはおそらくアルバムを識別するためだけに存在するので、通常はそれが選択されることを期待します。次に、image_tblで、その列をalbum_tblを参照するFKとして宣言します。
PSインデックスは通常、時間とスペースを犠牲にしてクエリを高速化します。テーブル宣言の主キー宣言は、インデックスを自動的に宣言します。 PK、UNIQUE、およびFK列セットにインデックスを付けることをお勧めします。