假設我們有以下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);
現在很明顯,PRODUCT_ID在tblProductExpanded應該是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
所以,有人可以給我解釋一下,爲什麼我們還需要「關係」的說法,如果我們可以查詢同一個信息,無論關係(AFAIK)?除了花時間設置它們之外,它們的實際用途是什麼?
你能詳細說一下嗎?我的意思是用戶本身不能訪問數據庫本身,只有形式(假設我們談論MS Access),並且我們可以指定什麼在表單中的哪個位置顯示出來,就好像它在關係中一樣(例如,在產品ID的組合框中表單中的Product_ID字段出現,因此用戶被迫選擇1而不輸入隨機數)。 – emihir0
除了參照完整性實施之外,在Access中建立關係的另外兩個優點是(1)它記錄了表之間的關係,因此如果運行數據庫文檔管理器,它將顯示在那裏,以及(2)如果您正在創建查詢查詢設計器可以自動建立表之間的連接(並且不需要「猜測」)。 –
對不起@HansUp我會刪除mysql標籤。我純粹談論MS-Access,但爲了更好地形象化情況,我使用了SQL本身。 – emihir0