SQL中的一对多关系

时间:2014-05-14 17:45:11

标签: sql

我试图理解“一对多关系”。我们假设我有两个表:PersonVehicle

Person表格中,我有两列:personidpersonamepersonidprimary key。我在Person表中有两行:

personid | personname
---------+-----------
1        | Rajesh
2        | Suresh

Vehicle表格中,我有两列:vehicleidvehiclename。我在Vehicle

中有一行
vehicleid | vehiclename
----------+------------
1         | Car

现在,根据“一对多关系”,每个人可以拥有零,一或多辆车。

那么,RajeshSuresh都可以映射到Car吗?

例如:

Rajesh -+- Car
Suresh -/

在“一对多关系”中,2个不同的Person是否可以引用相同的Vehicle?或者每个Vehicle是否只应映射到一个Person

在“多对一关系”中,Vehicle表中唯一的汽车可以映射到Person表中的多个人,对吗?

7 个答案:

答案 0 :(得分:1)

你需要多对多的关系"。它实际上是2-One-to-many关系的组合。在sql中执行此操作的唯一方法是使用第三个表。

<强>人 是PersonID 名称

一对多(一个人可以拥有多辆车)

所有权(或标题?) 是PersonID VehicleID

多对一(车辆可以有很多车主)

<强>车辆 vehicleid vehiclename

所有权表具有任何用户/车辆组合的潜在行(并且应该使该组合成为主键或至少是唯一约束)。

其他字段可以放在所有权表中,例如购买日期和金额,销售日期和金额等。因为这些属于车辆的所有权而不是所有者或车辆本身的财产。

答案 1 :(得分:0)

你的问题不一致,你说“每个人可以拥有零,一个或多个车辆”,但是你问“现在可以将Rajesh和Suresh都映射到Car ?“,这意味着每辆车可以拥有多个车主,每个人可以拥有多辆车......

假设想要将每辆车的所有权限制为一个人(实际上,车辆可以由多个人拥有),并且允许个人拥有多辆车,只需添加PersonId到{{ 1}}表,用于表示或指向拥有该车辆的个人。

那么你的车辆表就是

vehicle

答案 2 :(得分:0)

如果Rajesh和Suresh都有相同的车辆,并且每辆车可能拥有超过1辆车,那么你就拥有多对多的关系。

但如果一辆车只能由一个人拥有,那么你就拥有从人到车的一对多关系。

  

在一对多的关系中,2个不同的人可以参考汽车   在车辆表中

没有。 2不是一个。

答案 3 :(得分:0)

从Vehicle的角度来看,它有1个(一行,“Car Row”)到Many Person行(假设Person表有一个VehicleId列)

答案 4 :(得分:0)

Many to One vs One to Many指的是同一个概念,只是从不同方面来看。 (来自车辆或人)。

在标准的One To Many中你会有

人员表和车辆表,其中车辆表包含对人员表具有FK的personId。这样您就可以模拟一个人拥有0或多辆车的人。

如果车辆有多个车主,您应该引入人与车之间的多对多关系。那将需要第三个表(PersonVehicle)

答案 5 :(得分:0)

在你的例子中,Rajesh和Suresh可以共用同一辆车,你需要在人员表中使用汽车主钥匙。

Rajesh与CarA有一段关系 Suresh与CarA有一个关系

CarA将有很多关系(Rajesh&amp; Suresh)。

答案 6 :(得分:0)

  

现在,根据“一对多关系”,每个人可以拥有零,   一辆或多辆车。

正确。

  

那么,RajeshSuresh都可以映射到Car吗?

不,不是“一对多的关系”。这将是一个“多对多关系”。

  

在“一对多关系”中,2个不同的Person可以引用   相同Vehicle?或者每个Vehicle只应映射到一个   Person

每个Vehicle只应与 Person相关联。

  

在“多对一关系”中,Vehicle表中唯一的汽车   可以映射到Person表中的多个人,对吗?

是的,但每个Person只能链接到 Vehicle

“多对一”和“一对多”是相同的,只是反过来。因此,以下两个陈述是等价的:

  1. 一个 A可以将链接到多个 B
  2. 许多 B可以将链接到一个 A
  3. 注意每个(粗体)中是“一对多”和“多对一”,为了表示相同的事情,如何切换表AB

    实施例

    假设如下:

    Person      Vehicle
    ------      -------
    Jane        Car
    John        Truck
    

    一对一

    JaneCar相关联。每个Person一次只能链接到一个 Vehicle,反之亦然。

    Jane--------Car
    John        Truck
    

    一对多

    JaneCar Truck相关联。每个Vehicle一次只能链接到一个 Person。每个Person都可以链接到多个Vehicle

    Jane---+----Car
    John    \---Truck
    

    多对一

    Jane JohnCar相关联。每个Person一次只能链接到一个 Vehicle。每个Vehicle都可以链接到多个Person

    Jane----+---Car
    John---/    Truck
    

    多对多

    每个Vehicle都可以链接到多个Person,反之亦然。

    Jane John 链接到Car Truck

    Jane---+--+-Car
            \/
            /\
    John---+--+-Truck
    

    JaneCar Truck相关联,JohnTruck

    相关联
    Jane---+----Car
            \ 
    John-----+--Truck