Sql 实现一对多关系

Sql 实现一对多关系,sql,database,Sql,Database,我是编程新手。我正在设计一个数据库,它有两个表:地址表和客户表。我不知道如何分配外键。我不知道哪种方式更好: 方法1: 客户表列: 客户ID 名字 姓氏 地址ID 地址表列: 地址ID 国 状态 城市 地址线 方法2 客户表: 客户ID 名字 姓氏 地址表: 地址ID 客户ID 国 城市 地址线 换句话说,我不知道把外键放在哪里。如果每个客户都可以有很多地址,那么您需要使用方法2,因为这样一来,客户中每个客户的地址中都可以有多个记录 然而,在我看来,你可能需要一种多对多的关系。如果两个客户共享同

我是编程新手。我正在设计一个数据库,它有两个表:地址表和客户表。我不知道如何分配外键。我不知道哪种方式更好:

方法1:

客户表列:

客户ID 名字 姓氏 地址ID

地址表列:

地址ID 国 状态 城市 地址线

方法2

客户表:

客户ID 名字 姓氏

地址表:

地址ID 客户ID 国 城市 地址线


换句话说,我不知道把外键放在哪里。

如果每个客户都可以有很多地址,那么您需要使用方法2,因为这样一来,客户中每个客户的地址中都可以有多个记录

然而,在我看来,你可能需要一种多对多的关系。如果两个客户共享同一地址会发生什么情况


您可以通过包含第三个表来实现这一点,例如,在逻辑上位于Customer和Address之间的CustomerAddresses。第三个表将保存来自其他两个表(CustomerID和AddressID)的外键。

在第一个方法中,一个客户只能与一个地址关联,因为它只有一个id引用一个地址。但是,没有什么可以阻止多个客户拥有相同的地址id。因此,这表示多个客户对一个地址的关系。那不是你想要的

在第二种方法中,关系是相反的。每个地址都关联到一个客户,多个地址可以关联到同一个客户,这是一个客户对多个地址的关系

在sql中,要检索与客户关联的地址,您需要执行以下操作:

select * from address where customer_id = '<some customer_id>'

如果您试图实现一对多,那么推荐的方法是将表的主键(除一之外)作为外键放入多的表中

例如:如果一个客户有多个地址,而地址有一个客户。因此,您必须将地址作为外键放入地址表中

如果一个地址可以有多个客户,而一个客户有一个地址。因此,您必须将AddressNumber作为外键放入客户表中


祝你好运

我要指出的是,你实际上可能有一段多对多的关系。一个地址可以有多个客户,一个客户可以有多个地址。在本例中,使用联接表对包含addressid和customerid的关系进行建模,而不包含其他内容。这将有两个字段的连接PK,以确保唯一性。

您必须首先知道在您的关系中哪一个是一个,哪一个是多个。一个客户可以有多个地址吗?一个地址可以有多个客户吗?一个客户可以有多个地址,但一个地址不能有多个客户。我认为在大多数情况下,您会希望为每个客户创建一个单独的地址条目,即使地址相同,因为当一个客户编辑自己的地址时,您不希望它为任何其他客户更改。但这实际上取决于建模的内容