为什么我们需要"关系"在桌子之间?

时间:2015-04-26 18:43:16

标签: sql database ms-access

假设我们有以下两个表:

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)?除了必须花时间设置它们之外,它们的实际用途是什么。

2 个答案:

答案 0 :(得分:5)

我认为主要原因是数据完整性。如果两个表invoice and invoice_item之间存在关系。您将无法添加与发票无关的发票项目。这就是你想要的!

它被称为referential integrity。如果您没有外键,它可能会在您的数据库中变得非常混乱,因为您可以轻松地删除和损坏您的数据。

e.g。您可以删除发票而不是相应的发票项目。这被认为是不好的。

我认为这会让你有所作为。

答案 1 :(得分:1)

表之间的关系是良好关系数据库的一个重要方面。

1)它在一对彼此逻辑相关的表之间建立连接。

2)它有助于改进表结构并最小化冗余数据。

3)这种机制可以让你同时从多个表中获取数据。

4)关系也是以规范化形式维护数据库的必要条件,这是关系数据库规则的一部分。

5)同样@ Ryan-Neal Mes在上面的回答中说: - 保持参照完整性,这是关系概念的一个子部分。

明确定义的关系可确保数据库中的关系级完整性,从而保证关系本身的可靠性。只有在仔细,正确地建立每个关系时,才能利用关系数据库提供的诸多好处。

如果不这样做(在DB中没有明确定义的关系)意味着您将很难处理来自多个表的数据,并且当您尝试在相关表中插入,更新或删除记录时肯定会遇到问题。 / p>