この記事では、FOREIGN KEY制約と、2つのテーブル間の関係を構築するためのFOREIGNKEY制約を定義する方法について学習します。
リレーショナルデータベース管理システム(RDBMS)では、外部キーは、2つのテーブル間の関係を構築したり、2つのテーブルを結合したりするために使用される1つまたは複数のフィールドです。
- FOREIGN KEYは、RDBMSでは参照キーとも呼ばれます
- 2つのテーブル間のFOREIGNKEY制約を使用して、2つのテーブル間の親子関係を定義します。
- このフィールドは、親テーブルと呼ばれるテーブルのPRIMARY KEY制約を定義し、同じフィールドは、子テーブルと呼ばれる別のテーブルのFOREIGNKEY制約を定義します。
- テーブルには主キーを1つだけ含めることができますが、外部キーに定義された制限はありません。テーブルに1つまたは複数の外部キーを置くことができます。
- テーブルの作成中にFOREIGNKEY制約を定義したり、既存のテーブルにFOREIGNKEY制約を定義したりできます。
例を見て、外部キーの制約を理解して学習しましょう。
例:
ここでは、2つのテーブルがあります。1つはCourseテーブルで、もう1つはStudentテーブルです。
学生はコースを選択します。次のFOREIGNKEY制約の例は、1つのフィールドで定義されています。
テーブルナンバーワン:学生テーブル
Student_Id | First_Name | Last_Name | Email_Id | 都市 |
101 | カリーナ | Sayyed | [email protected] | ハイデラバード |
102 | Anmol | テマニ | [email protected] | ジャルガウン |
103 | ハーシャル | パテル | [email protected] | ムンバイ |
104 | サクシ | フード | [email protected] | プネ |
105 | Suresh | コーリ | [email protected] | ハイデラバード |
表2:コース表
Course_Id | Course_Name | Student_Id |
C101 | Java | 101 |
C102 | SQL | 102 |
C103 | SOA | ヌル |
C104 | SAP | 104 |
C105 | MuleSoft | 103 |
C101 | Java | 105 |
Studentテーブルでは、Student_IdフィールドはPRIMARY KEYであり、CourseテーブルではStudent_IdはFOREIGNKEYです。
FOREIGN KEY
制約は、無効なデータが親テーブルに含まれる値の1つである必要があるため、外部キー列に挿入されるのを防ぎます。
CREATETABLEでの外部キー制約の定義
次の例では、コーステーブルに外部キーを定義しています。
まず、次のフィールドを使用してStudentテーブルを作成しました。
CREATE TABLE Student( Student_Id int NOT NULL, First_Name varchar(40) NOT NULL, Last_Name varchar(40) NOT NULL, Email_Id varchar(50), City varchar(20) NOT NULL, PRIMARY KEY(Student_Id));
次の例は、他のテーブルでFOREIGNKEY制約を定義する方法を示しています。
テーブル名コース:
CREATE TABLE Course( Course_Id int NOT NULL, Course_Name varchar(40) NOT NULL, Student_Id int, FOREIGN KEY(Student_Id) REFERENCES Student(Student_Id));
コーステーブルでは、主キーを定義していません。 Student_IdにFOREIGNKEY制約を定義するだけです。
次のFOREIGNKEY制約の例は、複数のフィールドで定義されています。
3つのテーブルがあり、1つはPackageテーブル、2つ目はDataテーブル、3つ目はTalk_timeテーブルであるとします。
表1:パッケージ:
Package_Id | Data_Id | Talktime_Id |
P1001 | D1003 | T1001 |
P1002 | D1001 | T1002 |
P1003 | D1002 | T1003 |
P1004 | D1003 | T1004 |
P1005 | D1004 | T1005 |
表2:データ:
Data_Id | Data_Limit | Data_Price |
D1001 | 5 | 120 |
D1002 | 3 | 75 |
D1003 | 6 | 150 |
D1004 | 10 | 240 |
D1005 | 15 | 320 |
表3:Talk_Time:
Talk_Time_Id | Talk_Time _Limit | Talk_Time _Price |
T1001 | 120 | 130 |
T1002 | 70 | 105 |
T1003 | 60 | 90 |
T1004 | 200 | 220 |
T1005 | 150 | 170 |
Talk_Timeテーブルでは、Talk_Time_Idが主キーです。
データテーブルでは、Data_Idが主キーです。
一方、Packageテーブルでは、Talk_Time_IdとData_IdはFOREIGNキーです
表1:データ:
CREATE TABLE Data(Data_Id varchar(5) NOT NULL, Data_Limit int, Data_Price int, PRIMARY KEY(Data_Id));
表2:Talk_Time:
CREATE TABLE Talk_Time(Talk_Time_Id varchar(5) NOT NULL, Talk_Time_Limit int, Talk_Time_Price int , PRIMARY KEY(Talk_Time_Id));
表番号3:パッケージ:
CREATE TABLE Package(Package_Id varchar(5) NOT NULL, Data_Id varchar(5), Talk_Time_Id varchar(5), FOREIGN KEY(Data_Id) REFERENCES Data(Data_Id), FOREIGN KEY(Talk_Time_Id) REFERENCES Talk_Time(Talk_Time_Id));
ALTER TABLEを使用した外部キー制約:
すでにテーブルを作成していて、フィールドにFOREIGNKEY制約を定義したいとします。このような場合は、ALTERTABLEクエリを使用してFOREIGNKEY制約を追加します。
次のクエリは、Student_IdフィールドにFOREIGNKEY制約を追加するために使用されます。
ALTER TABLE Course ADD FOREIGN KEY(Student_Id) REFERENCES Student(Student_Id);
ADDキーワードは、テーブル名の後に使用され、既存のテーブルにFOREIGNKEY制約を追加します。
テーブルから外部キー制約を削除
次のクエリを使用して、テーブルからFOREIGNKEY制約を削除します。
ALTER TABLE Course DROP FOREIGN KEY course_ibfk_1;
Dropキーワードは、Student_IdフィールドからFOREIGNKEY制約を削除するために使用されます。
course_ibfk_1は外部キー制約名です。
FOREIGNKEY制約フィールドにnull値を含めることができます。 FOREIGNKEY制約フィールドに重複する値を含めることができます。