有些车主拥有出租车,有些车主为出租车公司提供出租车。出租车公司有司机。出租车可以有一个或多个分配的司机,司机可以驾驶多辆出租车。
这意味着出租车和司机之间会有许多对多的关系。这是非常直接的。根据我的假设,出租车公司将车主、司机和出租车的记录保存在三个不同的表/实体中-车主、出租车和司机。公司知道哪辆出租车属于哪位车主,由哪位司机驾驶。
不同的是,大多数车主本身就是司机。我该如何把这件事联系起来。
总而言之:当实体的一个组件也可以是另一个实体的组件时,如何关联?(在这里,一些车主也可以是司机)
我正在尝试制作一个ER图,并在稍后进行标准化。
发布于 2013-12-28 12:52:38
这意味着从出租车到司机将会有一对多的关系。
真的吗?当一辆出租车在店里维修时会发生什么?司机不能同时开另一辆出租车吗?如果是这样的话,你实际上想要的是多对多--一个司机可以开很多辆出租车,一辆出租车可以由一个或多个司机驾驶。
你可以这样做的一种方式是使用组合。
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));发布于 2013-12-28 13:50:29
有两个选项:
下面的模型表示选项2。资产分配用于记录在给定班次谁在驾驶哪辆汽车的信息(如果您愿意,可以进一步充实此信息)。
请注意,驱动程序可能会成为“驱动程序所有者”,但模型不会跟踪这种更改,但是,它也可以进行扩展以适应这一变化。

https://stackoverflow.com/questions/20811050
复制相似问题