Database 实体关系-处理过期关系的最佳方法
假设有一个Database 实体关系-处理过期关系的最佳方法,database,entity-framework,entity-relationship,Database,Entity Framework,Entity Relationship,假设有一个行程,为每次行程分配一个总线 所以一个行程有一个总线 一辆公共汽车有许多座位 每个座位每个行程都有一个预订 但是,如果您考虑多天,每个阀座< /代码>有许多预订< /代码>。p> 我的问题是,实现座位和预订之间关系的最佳方式是什么 例如: 我可以使用时间戳存储预订。因此,当我想获得座位的当前或下一次预订时,我可以使用日期进行筛选。但是预订在旅行后过期,因此表中会有很多过期数据。您有旅行和旅行详细信息(预订、公交车)。 我认为你们的主桌是旅行,所以旅行和预订之间的关系也应该是旅行和公
行程
,为每次行程分配一个总线
- 所以一个
有一个行程
总线
- 一辆
有许多公共汽车
座位
- 每个
每个座位
行程都有一个
预订
但是,如果您考虑多天,每个<代码>阀座< /代码>有许多<代码>预订< /代码>。p> 我的问题是,实现
座位
和预订
之间关系的最佳方式是什么
例如:
我可以使用时间戳存储
预订
。因此,当我想获得座位的当前或下一次预订时,我可以使用日期进行筛选。但是预订在旅行后过期,因此表中会有很多过期数据。您有旅行和旅行详细信息(预订、公交车)。
我认为你们的主桌是旅行,所以旅行和预订之间的关系也应该是旅行和公交车之间的关系。
我想你们不需要在预订和座位之间建立直接的关系
当旅行日期到期时,意味着其他细节(预订和巴士)也将到期 您有旅行和旅行详细信息(预订、公交车)。
我认为你们的主桌是旅行,所以旅行和预订之间的关系也应该是旅行和公交车之间的关系。
我想你们不需要在预订和座位之间建立直接的关系
当旅行日期到期时,意味着其他细节(预订和巴士)也将到期 您所描述的是数据之间的时间关系。这会变得非常棘手,而且非常快,很难保持约束的有效性和准确性以确保数据完整性
在这种情况下,听起来更好的解决方案是不使用时间戳,而是使用行程号作为区分标准
这意味着您可以为特定的公交车获取特定行程的所有座位,或者如果您愿意,您可以获取所有行程的所有座位。您所描述的是数据之间的时间关系。这会变得非常棘手,而且非常快,很难保持约束的有效性和准确性以确保数据完整性
在这种情况下,听起来更好的解决方案是不使用时间戳,而是使用行程号作为区分标准
这意味着你可以为一辆特定的巴士获得一次特定旅程的所有座位,或者如果你愿意,你可以在所有旅程中获得所有座位。@Cobusve有一个正确的想法:bus
和Seat
是具体的对象;没有理由不在数据库中为它们提供一个相当永久的记录<代码>行程
和为给定行程将乘客
分配到座位
s都是抽象的、暂时的概念(您给了非常合适的名称预订
)。(实际上,您应该考虑一下<代码>乘客<代码>表,并将这些记录视为永久性的,如“代码>总线< /代码>和<代码>座位< /代码>)
Bus
和Seat
显然有一个0或1对多的关系(即,每一个都可以独立存在,Seat
有一个可为空的外键BusId,而在EF中,Bus
有一个Seat
的ICollection
,可以随时设置。在行程
和预订
中,很明显,您将在预订行程之前设置行程–您甚至可以提前创建行程,以便在开始预订之前为潜在乘客提供即将到来的日程安排
现在,什么是预订
?预订是给定行程的乘客
与特定座位
的关联:
class Booking
{
public virtual Passenger Passenger { get; set; }
public virtual Trip Trip { get; set; }
public virtual Seat Seat { get; set; }
}
并将Booking
的ICollection
添加到Trip
。就这样。按照惯例,EF 6将检测乘客
、行程
和座位
为预订
上的外键,并在预订
表中为其隐式创建外键
您可以使用[Required]
或映射来执行其他操作:(1)确保预订的主键是这三个外键的组合键(2)将与行程相关的所有预订的删除与该行程的删除级联,但这回答了您最初提出的关于预订
s和座位
s应该如何关联的问题
特别是,关于自动删除行程的计时器,你应该更仔细地考虑一下:很可能你想以某种方式捕捉旅行的细节——比如账单或审计——并且不想在旅行结束时旅行从数据库中消失。@Cobusve有一个正确的想法:Bus
和Seat
是具体的对象;没有理由不在数据库中为它们提供一个相当永久的记录<代码>行程
和为给定行程将乘客
分配到座位
s都是抽象的、暂时的概念(您给了非常合适的名称预订
)。(实际上,您应该考虑一下<代码>乘客<代码>表,并将这些记录视为永久性的,如“代码>总线< /代码>和<代码>座位< /代码>)
Bus
和Seat
显然有一个0或1对多的关系(即,每一个都可以独立存在,Seat
有一个可为空的外键BusId,而在EF中,Bus
有一个Seat
的ICollection
,可以随时设置。对于Trip
和Booking
,很明显,您将在预订任何行程之前设置行程–您甚至可以提前创建行程,为潜在乘客提供即将到来的行程安排