いくつかの良い答えがありました。少し推測させてください。
「dasblinkenlight」が述べているように、検索の速度 (データベースは 2 つのテーブル間の関係を事前に認識しており、クエリを最適化できる可能性があります)、さらに重要なのは参照/データの整合性です。
2つ目についてもう少し話しましょう。
次の 3 つのテーブルがある単純なシナリオを考えてみましょう (私はこれを単純化しました。実際には、多くの製品を注文することができますが、簡潔にするために単純にしています)。
CustomerTable
ID
FirstName
LastName
OrderTable
ID
CustomerID
ProductID
ProductTable
ID
Description
外部キーがなければ、次のことが自由にできます。
- 商品のない注文を作成する
- 顧客なしで注文を作成する
- 注文のある顧客を削除する
- 商品などを含む注文を削除...
これは災害のレシピです
外部キーを使用することで、上記を次のように再設計できます。
CustomerTable
ID
FirstName
LastName
OrderTable
ID
CustomerID -> References CustomerTable.ID
ProductID -> References ProductTable.ID
ProductTable
ID
Description
CustomerID と ProductID が「NOT NULL」であることを指定できます (他の列と同様)。これは、注文を作成することを意味します。既存の顧客と既存の製品が必要です。優秀な!
しかし、それは良くなります。商品の削除を開始するとどうなりますか? いくつかのカスケード オプションを指定していない限り (これを参照)、データベースはぐらつきをスローし、「いいえ。それは削除できません。何かによって参照されています」と言います。
これは、方程式のデータ整合性の部分です。そこにないものを指すことはできません (外部キーは、[null が許可されている場合] またはそこにあるものを指すことを主張します。主キーはこれに役立ちます)。
突然、データベース自体が、すべてがうまく連携し、うまく結びついていることを確認します。それがなければ、すべての注文を削除したり、製品を削除したり、必要なものをすべて削除したりできます。すると、アプリケーションは一体何が起こっているのか疑問に思うでしょう。
それらを使用してください:)