两个表之间的SQL Server关系,能否解释一下?

3

非常抱歉问一个愚蠢的问题,但是我还是要问。

Sql Server 有两个表:Customer 和 Order。每个 Customer 只能拥有一个 Order。

在使用 Sql Server Diagram 创建 customer.CustomerId 和 order.CustomerID 的关系时,应该向哪个方向拖动箭头?是从 Customer 拖到 Order 还是从 Order 拖到 Customer?

一般来说,这样做有没有区别呢?我在哪里可以阅读相关信息?或者您能否澄清一下?谢谢!

3个回答

1

customer.customerID字段应该是客户表的主键。

然后,无论您如何拖动箭头,SQLServer都足够聪明,可以找出答案。

根据添加到此答案的评论...您应该从引用表向引用表拖动“箭头”(在您的情况下从客户到订单表)。然后检查SQLServer自动分配的关系。


当您想引用“UNIQUE”约束时怎么办?如果相同的列在两个表中都包含了“UNIQUE”/“PRIMARY KEY”,即一对一关系,该怎么处理? - onedaywhen
@onedaywhen。观点不错,但那些并不是被问到的问题。 - Ron Tuffin
1
你确定吗?“一个客户只能有一个订单”这句话对我来说意味着一对一的关系(尽管它并不一定暗示一个订单只能有一个客户,但这似乎很可能)。此外,没有提到“PRIMARY KEY”,多个候选键等等,为什么要假设“customer.customerID字段应该是主键”? - onedaywhen

0

客户下订单

这就相当于进行左连接操作。

SELECT *
FROM Customer c LEFT JOIN
Order o ON c.CustomerID = o.CustomerID

没有相应的客户条目,您无法进行订单输入,但是您可以有一个没有订单的客户。

您还应该查看FOREIGN KEY约束


感谢您的快速回复。当在SQL Server中绘制图表时,我会困惑应该如何拖动箭头。这对我来说仍然不太清楚。 - user9969

0

外键Order表中。

因此,我本能地总是从具有外键的订单(表)拖到客户(具有主键/唯一键的表)。

然而,箭头指向哪个方向只取决于建模工具允许你做什么。

最终,你所做的是在Order表和Customer表之间的CustomerId列上创建一个外键关系


谢谢您的回复。您是说如果使用Sql Server图表功能,箭头拖动的方向并不重要,因为Sql Server会自动处理吗? - user9969

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接