SQL - 外部キー: テーブル間の関係を構築する
こんにちは、データベース愛好家の皆さん!今日は、SQLの外部キーの世界に踏み込む興奮的な旅に出発します。あなたの親切な近所のコンピュータ教師として、私はこの関係データベースの背骨を形成する重要な概念をガイドするためにここにいます。那么、仮想のメモ pads を持ち出し、一緒に潜りましょう!
SQL 外部キー: 絆を結ぶ
巨大な図書館を組織していると想像してみてください。本の棚と著者の棚があるとします。それぞれの本を著者とリンクさせることができ、著者の詳細をすべての本に書かなくても済む就好了的话、素晴らしいですね。これが SQL での外部キーの役割です!
外部キーとは?
外部キーは、1つのテーブルの列(または複数の列)で、別のテーブルの主キーを参照します。2つのテーブル間の橋であり、それらの間に関係を確立します。
簡単な例を見てみましょう:
CREATE TABLE Authors (
AuthorID INT PRIMARY KEY,
AuthorName VARCHAR(100)
);
CREATE TABLE Books (
BookID INT PRIMARY KEY,
Title VARCHAR(200),
AuthorID INT,
FOREIGN KEY (AuthorID) REFERENCES Authors(AuthorID)
);
この例では、Books
テーブルの AuthorID
は外部キーで、Authors
テーブルの AuthorID
を参照しています。これは、それぞれの本が著者とリンクされていますが、すべての本に著者の詳細を繰り返す必要はありません。
外部キーを使う理由
- データ整合性:外部キーは、存在しない著者で本を追加できないようにします。
- 関係:テーブル間に意味のある関係を築くことができます。
- 効率性:データを一度に保存し、何度も参照することで、スペースを節約し、重複を減少させます。
既存の列に外部キー制約を追加
時々、既存の列に外部キー制約を追加したいと思うかもしれません。心配しないでください、SQLはあなたをサポートします!以下のようにやります:
ALTER TABLE Books
ADD CONSTRAINT FK_AuthorID
FOREIGN KEY (AuthorID) REFERENCES Authors(AuthorID);
このコマンドは、Books
テーブルの既存の AuthorID
列に外部キー制約を追加します。私たちは制約を FK_AuthorID
と名付けました - 制約に意味のある名前を付けるのは良い習慣です。
注意点
既存の列に外部キー制約を追加する前に、その列のすべての値が参照先テーブルに対応する値を持っていることを確認してください。さもなければ、SQLは怒ります(そして、エラーを発生させます!)!
外部キーを削除:別れは簡単です
時折、関係が変わり、外部キー制約を削除する必要があります。以下のようにやります:
ALTER TABLE Books
DROP FOREIGN KEY FK_AuthorID;
このコマンドは、先ほど追加した外部キー制約を削除します。覚えておいてください、これは列やそのデータを削除するものではありません - テーブル間の関係だけを削除します。
主キーと外部キー:動的デュオ
主キーと外部キーをデータベースの世界での動的デュオと考えます。それぞれに役割がありますが、一緒に動作するのが最適です。以下にそれぞれの特徴をまとめます:
主キー
- テーブルの各レコードを一意に識別します
- ウニークな値を含まなければならず、NULL 値を含まないことができます
- テーブルは一つしか主キーを持てません
外部キー
- 別のテーブルの主キーを参照します
- 重複の値と NULL 値を持つことができます
- テーブルは複数の外部キーを持つことができます
以下の表に、其主要な違いをまとめます:
特性 | 主キー | 外部キー |
---|---|---|
一意性 | 必ず一意 | 重複可 |
NULL 値 | 不可 | 可 |
テーブルあたりの数 | 1つのみ | 複数可 |
目的 | 自テーブルのレコードを識別 | 他テーブルのレコードを参照 |
さらに複雑な例を見てみましょう:
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
Name VARCHAR(100),
Email VARCHAR(100)
);
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
OrderDate DATE,
CustomerID INT,
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
CREATE TABLE OrderItems (
OrderItemID INT PRIMARY KEY,
OrderID INT,
ProductName VARCHAR(100),
Quantity INT,
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID)
);
この例では、以下の3つのテーブルがあります:
-
Customers
でCustomerID
が主キー -
Orders
でOrderID
が主キーで、CustomerID
がCustomers
を参照する外部キー -
OrderItems
でOrderItemID
が主キーで、OrderID
がOrders
を参照する外部キー
この構造により、どの顧客がどの注文をしたか、そしてそれぞれの注文にどのアイテムが含まれているかを追跡できます。不要な顧客や注文情報を繰り返す必要はありません。
結論:すべてを合わせる
そして、皆さん!外部キーの土地を旅しました。その作成から変更、削除までです。主キーと外部キーが強固で効率的なデータベース構造を形成する方法を見ました。
覚えておいてください、外部キーはデータベースの近所の親切な隣人のようなものです - テーブル間のコミュニケーションを助け、協調して働きます。データ整合性を保ち、意味のある関係を築き、データベースをスムーズに動作させます。
SQLの冒険を続ける中で、これらの概念を試してみてください。自分でテーブルを作成し、外部キー制約を追加し、データ操作にどのように影響するかを確認してください。練習を重ねることで、自然なものとなります。
ハッピーコーディング、そしてあなたのクエリが常に期待通りの結果を返すことを祈っています!
Credits: Image by storyset