首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体关系?当实体的一个组件也可以是另一个实体的组件时,如何关联?

实体关系?当实体的一个组件也可以是另一个实体的组件时,如何关联?
EN

Stack Overflow用户
提问于 2013-12-28 12:39:57
回答 2查看 422关注 0票数 0

有些车主拥有出租车,有些车主为出租车公司提供出租车。出租车公司有司机。出租车可以有一个或多个分配的司机,司机可以驾驶多辆出租车。

这意味着出租车和司机之间会有许多对多的关系。这是非常直接的。根据我的假设,出租车公司将车主、司机和出租车的记录保存在三个不同的表/实体中-车主、出租车和司机。公司知道哪辆出租车属于哪位车主,由哪位司机驾驶。

不同的是,大多数车主本身就是司机。我该如何把这件事联系起来。

总而言之:当实体的一个组件也可以是另一个实体的组件时,如何关联?(在这里,一些车主也可以是司机)

我正在尝试制作一个ER图,并在稍后进行标准化。

EN

回答 2

Stack Overflow用户

发布于 2013-12-28 12:52:38

这意味着从出租车到司机将会有一对多的关系。

真的吗?当一辆出租车在店里维修时会发生什么?司机不能同时开另一辆出租车吗?如果是这样的话,你实际上想要的是多对多--一个司机可以开很多辆出租车,一辆出租车可以由一个或多个司机驾驶。

你可以这样做的一种方式是使用组合。

代码语言:javascript
复制
public class Person
{
    public virtual Driver AsDriver { get; set; } // can be null (not a driver)
    public virtual Owner AsOwner { get; set; } // can be null (not an owner)
}

public class Driver
{
    // shares same primary key as Person
    public virtual Person AsPerson { get; set; } // cannot be null
    public virtual ICollection<Taxi> TaxisDriven { get; set; }
}

public class Owner 
{
    // shares same primary key as Person
    public virtual Person AsPerson { get; set; } // cannot be null
    public virtual ICollection<Taxi> TaxisOwned { get; set; }
}

public class Taxi
{
    public virtual ICollection<Driver> Drivers { get; set; }
    public virtual ICollection<Owner> Owners { get; set; }
}

var person = LoadSpecificPerson(personId);
var isBothOwnerAndDriver = person.AsDriver != null && person.AsOwner != null;
var drivesOwnTaxi = isBothOwnerAndDriver && person.AsOwner.TaxisOwned.Any(
    x => person.AsDriver.TaxisDriven.Select(y => y.TaxiId).Contains(x.TaxiId));
票数 0
EN

Stack Overflow用户

发布于 2013-12-28 13:50:29

有两个选项:

  1. 有两个表来解决驱动程序问题。一个是给不拥有出租车的司机的,另一个是给拥有出租车的司机的。这是很糟糕的,因为有很多原因。例如,列将在两个单独的表中重复,并且必须在每个表上分别运行对驱动程序的搜索,以定位给定的驱动程序。我不推荐这样做。
  2. 另一种选择是在1个表中包含所有者和非所有者的1个表(在下图中称为party )。然后,您可以为每种类型(仅限驱动程序、仅限所有者、所有者和驱动程序)添加角色。

下面的模型表示选项2。资产分配用于记录在给定班次谁在驾驶哪辆汽车的信息(如果您愿意,可以进一步充实此信息)。

请注意,驱动程序可能会成为“驱动程序所有者”,但模型不会跟踪这种更改,但是,它也可以进行扩展以适应这一变化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20811050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档