假设我们有以下两个表:
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
有人可以向我解释一下,为什么我们需要"关系"如果我们可以查询相同的信息而不管关系(AFAIK)?除了必须花时间设置它们之外,它们的实际用途是什么。
答案 0 :(得分:5)
我认为主要原因是数据完整性。如果两个表invoice and invoice_item
之间存在关系。您将无法添加与发票无关的发票项目。这就是你想要的!
它被称为referential integrity。如果您没有外键,它可能会在您的数据库中变得非常混乱,因为您可以轻松地删除和损坏您的数据。
e.g。您可以删除发票而不是相应的发票项目。这被认为是不好的。
我认为这会让你有所作为。
答案 1 :(得分:1)
表之间的关系是良好关系数据库的一个重要方面。
1)它在一对彼此逻辑相关的表之间建立连接。
2)它有助于改进表结构并最小化冗余数据。
3)这种机制可以让你同时从多个表中获取数据。
4)关系也是以规范化形式维护数据库的必要条件,这是关系数据库规则的一部分。
5)同样@ Ryan-Neal Mes在上面的回答中说: - 保持参照完整性,这是关系概念的一个子部分。
明确定义的关系可确保数据库中的关系级完整性,从而保证关系本身的可靠性。只有在仔细,正确地建立每个关系时,才能利用关系数据库提供的诸多好处。
如果不这样做(在DB中没有明确定义的关系)意味着您将很难处理来自多个表的数据,并且当您尝试在相关表中插入,更新或删除记录时肯定会遇到问题。 / p>