MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのFOREIGN KEY制約における親テーブルと子テーブルの関係とは?1対多の関係を解説

MySQLにおいてFOREIGN KEY(外部キー)制約を使ってテーブル同士を関連付ける場合、親テーブルと子テーブルの間には「1対多(One-to-Many)」の関係が成り立ちます。

1対多の関係とは

この関係は、「customer(顧客)」と「orders(注文)」という2つのテーブルを例にすると理解しやすくなります。ここでは、「customer」が親テーブル、「orders」が子テーブルにあたります。1人の顧客が複数の注文を持つことができる一方で、1つの注文は必ず1人の顧客に紐づくため、この関係は1対多になります。

サンプルデータでの確認

実際に両方のテーブルへデータを挿入して確認してみましょう。

mysql> Select * from Customer;

+----+---------+
| id | name    |
+----+---------+
| 1  | Gaurav  |
| 2  | Raman   |
| 3  | Harshit |
| 4  | Aarav   |
+----+---------+

4 rows in set (0.00 sec)

mysql> Select * from orders;

+----------+----------+------+
| order_id | product  | id   |
+----------+----------+------+
| 100      | Notebook | 1    |
| 110      | Pen      | 1    |
| 120      | Book     | 2    |
| 130      | Charts   | 2    |
+----------+----------+------+

4 rows in set (0.00 sec)

結果の解釈

上記の結果セットを見ると、1人の顧客が複数の注文を持てることが明確にわかります。「customer」テーブルで id = 1 の顧客(Gaurav)には「Notebook」と「Pen」の2つの注文が紐づいており、id = 2 の顧客(Raman)にも「Book」と「Charts」の2つの注文が関連付けられています。

このように、子テーブル(orders)側には親テーブル(customer)の主キーである「id」が外部キーとして格納され、同じ顧客IDが複数行に出現することで、1対多の関係が実現されています。FOREIGN KEY制約により、存在しない顧客IDを持つ注文の登録は拒否されるため、テーブル間の参照整合性が保たれる点も重要なポイントです。

  1. MySQLのTINYINT(1)とブール型(BOOLEAN)の違いとは?

    結論から言うと、TINYINT(1)とブール型(BOOLEAN)の間に違いはありません。MySQLでは、BOOLまたはBOOLEANというキーワードは内部的にTINYINT(1)へと変換されます。つまり、BOOLやBOOLEANはTINYINT(1)の別名(シノニム)として扱われるのです。それでは、実際にテーブルを作成して確認してみましょう。BOOLEAN型でテーブルを作成するmysql> create table DemoTable ( isMarried Boolean ); Query OK, 0 rows affected (1.77 sec)次に、作成したテーブルの構造

  2. MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?

    MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970     (