[英]One To Many Relationship in SQL
我试图理解“一对多关系”。 假设我有两个表: Person
和Vehicle
。
在Person
表中,我有2列: personid
和personame
。 personid
是primary key
。 我的Person
表中有2行:
personid | personname
---------+-----------
1 | Rajesh
2 | Suresh
在“ Vehicle
表中,我有2列: vehicleid
和vehiclename
。 Vehicle
表中有一行
vehicleid | vehiclename
----------+------------
1 | Car
现在,根据“一对多关系”,每个人可以拥有零辆,一辆或多辆车。
那么, Rajesh
和Suresh
可以映射到Car
吗?
例如:
Rajesh -+- Car
Suresh -/
在“一对多关系”中,两个不同的Person
可以引用同一Vehicle
吗? 还是应该每Vehicle
只能被映射到一个单一的Person
?
在“多对一关系”中,“ Vehicle
表中唯一的Vehicle
可以映射到“ Person
表中的多个人,对吗?
您需要多对多的“关系”。 它实际上是2对一对多关系的组合。 在sql中执行此操作的唯一方法是拥有第三个表。
人 PersonID名称
一对多(一个人可以拥有许多车辆)
所有权(或标题?) PersonID车辆ID
多对一(车辆可以有很多所有者)
车辆 caridid 车辆名称
所有权表对于任何用户/车辆组合都有一个潜在的行(并且应该使该组合成为主键或至少一个唯一约束)。
可以在所有权表中放置其他字段,例如购买日期和金额,销售日期和金额等。因为这些字段与车辆的所有权有关,与所有者或车辆本身的财产无关。
您的问题前后矛盾,您说“ 每个人可以拥有零个,一个或多个车辆 ”,然后您问“ 现在可以将Rajesh和Suresh都映射到Car吗?”,这意味着每个车辆可以有多个所有者, 而不是每个所有者一个人可以有多辆车...
假设要将每辆车的所有权限制为一个人(实际上,一辆车可以由多个人拥有),并允许一个人拥有多辆车,只需将PersonId
添加到vehicle
表中,以指示或指向拥有该车辆的个人。
因此,您的车辆表将是
vehicleid OwnerId vehiclename
1 1 'Ford'
2 1 'Maserati'
3 1 'BMW'
如果Rajesh和Suresh都拥有相同的载具,并且每个载具可能都具有不止1辆载具,那么您将具有多对多关系。
但是,如果一辆车只能由一个人拥有,那么您将在人与车之间建立一对多关系。
在一对多关系中,两个不同的人可以在车辆表中引用该车
没有。 2不是一个。
从Vehicle的角度来看,它对多人行具有1(一行,即“ Car Row”)(假设Person表具有VehicleId列)
Many to One
与One to Many
是指相同的概念,只是从不同的角度看。 (来自车辆或人)。
在标准的“一对多”中,您将拥有
人员表和车辆表,其中,车辆表包含带有指向该人员表的FK的personId。 这将使您为一个人建模,该人拥有0个或一个人拥有的许多车辆。
如果车辆有多个所有者,则应在人与车辆之间引入多对多关系。 那将需要第三个表(PersonVehicle)
在您的示例中,Rajesh和Suresh可以共享同一辆车来执行此操作,而您需要在人员表中使用车主键。
Rajesh与CarA有一种关系Suresh与CarA有一种关系
和CarA会有很多关系(Rajesh和Suresh)。
现在,根据“一对多关系”,每个人可以拥有零辆,一辆或多辆车。
正确。
那么,
Rajesh
和Suresh
可以映射到Car
吗?
不,不是“一对多关系”。 这将是“多对多关系”。
在“一对多关系”中,两个不同的
Person
可以引用同一Vehicle
吗? 还是应该每Vehicle
只能被映射到一个单一的Person
?
每个Vehicle
只能链接到一个 Person
。
在“多对一关系”中,“
Vehicle
表中唯一的Vehicle
可以映射到“Person
表中的多个人,对吗?
是的,但是每个Person
只能链接到单个 Vehicle
。
相反,“多对一”和“一对多”是同一回事。 因此,以下两个语句是等效的:
A
可以链接到多个 B
B
可以链接到一个 A
请注意每个(粗体)中的“一对多”和“多对一”,以及为了表示同一件事,如何将表A
和B
交换?
假设以下内容:
Person Vehicle
------ -------
Jane Car
John Truck
Jane
与Car
。 每个Person
一次只能链接到一辆 Vehicle
,反之亦然。
Jane--------Car
John Truck
Jane
与Car
和 Truck
。 Vehicle
一次只能链接一个 Person
。 每个Person
都可以链接到多个Vehicle
。
Jane---+----Car
John \---Truck
Jane
和 John
与Car
有联系。 每个Person
一次只能链接到一辆 Vehicle
。 每个Vehicle
可以链接到多个Person
。
Jane----+---Car
John---/ Truck
每个Vehicle
可以链接到多个Person
,反之亦然。
Jane
和 John
都与Car
和 Truck
。
Jane---+--+-Car
\/
/\
John---+--+-Truck
Jane
链接到Car
and Truck
, John
链接到Truck
Jane---+----Car
\
John-----+--Truck
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.