1. ホーム
  2. sql

[解決済み] なぜ、テーブル間の「リレーションシップ」が必要なのか?

2022-03-11 23:08:51

質問

以下の2つのテーブルがあるとします。

CREATE TABLE tblProduct
(`Product_ID` int, `Product_Name` varchar(7));

そして

CREATE TABLE tblProductExtended
(`Product_ID` int, `Product_Size` int, `Product_Quantity` int);

この値で

INSERT INTO tblProduct
    (`Product_ID`, `Product_Name`)
VALUES
    (1, 'Shoes1'),
    (2, 'Shoes2');

そして

INSERT INTO tblProductExtended
    (`Product_ID`, `Product_size`, `Product_Quantity`)
VALUES
    (1, 36, 20),
    (1, 37, 20),
    (1, 38, 30),
    (2, 36, 50),
    (2, 37, 60),
    (2, 37, 75);

今、明らかに、tblProductExpandedのProduct_IDは、tblProductのProduct_IDのFKであるべきです。しかし、私はまだクエリを実行することができます。

SELECT tblProduct.Product_ID, Product_Name, Product_Size, Product_Quantity
FROM tblProduct
INNER JOIN tblProductExtended ON tblProduct.Product_id = tblProductExtended.Product_id

どちらが返すか。

Product_ID  Product_Name    Product_Size    Product_Quantity
1   Shoes1  36  20
1   Shoes1  37  20
1   Shoes1  38  30
2   Shoes2  36  50
2   Shoes2  37  60
2   Shoes2  37  75

リレーションシップに関係なく同じ情報をクエリできるのであれば、なぜリレーションシップが必要なのか、どなたか説明していただけませんか?設定に時間がかかることを除けば、実際にどのような用途があるのでしょうか。

どのように解決するのですか?

主な理由は、データの整合性のためだと思います。2つのテーブルの間にリレーションシップがある場合 invoice and invoice_item . 請求書と関係のない項目を追加することはできません。これは、あなたが望むものです

その名も 参照整合性 . 外部キーがないと、データを簡単に削除したり破損させたりできるので、データベースがかなり混乱する可能性があります。

例:請求書を削除しても、それに対応する請求書項目が削除されない可能性があります。これは悪いことだと考えられています。

これによって、何かが見えてくると思うのです。