Database design 如何对随时间变化的对象建模

Database design 如何对随时间变化的对象建模,database-design,activerecord,uml,data-modeling,erd,Database Design,Activerecord,Uml,Data Modeling,Erd,我正试图为乘飞机旅行的乘客开发一个数据/对象模型。 简言之: we have customers who make reservations to take trips. 我很难确定我应该有两个对象/模型:客户和旅行,还是三个:客户、预订和旅行 我相信我的困惑源于这样一个事实:随着时间的推移,预订变成了旅行。这一事实让我认为最好只有两种模式:客户模式和旅行模式。在这种情况下,旅行将属于customer,并具有以下示例属性:customer\u id、reservation\u number、d

我正试图为乘飞机旅行的乘客开发一个数据/对象模型。 简言之:

we have customers who make reservations to take trips.
我很难确定我应该有两个对象/模型:客户和旅行,还是三个:客户、预订和旅行

我相信我的困惑源于这样一个事实:随着时间的推移,预订变成了旅行。这一事实让我认为最好只有两种模式:客户模式和旅行模式。在这种情况下,旅行将属于customer,并具有以下示例属性:customer\u id、reservation\u number、destination、travel\u date等

这种方法的问题是,预订和预订都会发生变化,并且会被取消,我有点不愿意在旅行日期、目的地或取消方面进行大量更改,从而混淆旅行模式

更新:这里有更多关于旅行的信息 感兴趣的项目:乘客人数、出发时间、着陆时间、航班持续时间、取消次数、目的地、旅行里程、机票成本、准时到达标志、天气状况。旅行/航班可由航空公司取消,天气和预订可由客户在旅行/航班时间前取消

也许我缺少的是第四种模式,它将预订转换为旅行票

所以我的问题

问题是我用一种首选的设计模式来描述一类特定的数据模型,如果是这样,模式和解决方案是什么

其他比我更有经验的人是如何解决这个问题的

我碰巧使用RubyonRails/activerecord进行开发,但这个问题适用于任何开发框架


谢谢你的意见

似乎一个客户有很多次旅行,一次旅行有很多客户,这是一种多对多的关系

models/customer.rb
class Customer < ActiveRecord::Base
  has_many :reservations
  has_many :trips, :through => :reservations
end

models/trip.rb
class Trip < ActiveRecord::Base
  has_many :reservations
  has_many :customers, :through => :reservations
end

models/reservation.rb
class Reservation < ActiveRecord::Base
  belongs_to :customer
  belongs_to :trip
end

预订和机票对我来说似乎是一样的,所以我认为您不需要单独的机票型号。

似乎一个客户有很多次旅行,而一次旅行有很多客户,这是一种多对多的关系

models/customer.rb
class Customer < ActiveRecord::Base
  has_many :reservations
  has_many :trips, :through => :reservations
end

models/trip.rb
class Trip < ActiveRecord::Base
  has_many :reservations
  has_many :customers, :through => :reservations
end

models/reservation.rb
class Reservation < ActiveRecord::Base
  belongs_to :customer
  belongs_to :trip
end

预订和机票对我来说似乎是一样的,所以我认为您不需要单独的机票模型。

我强烈建议先创建一个,然后忽略所有的实现。当您完成并准备开始开发时,持久性机制和编程环境将变得重要。

我强烈建议您先创建一个实现,然后再忽略所有实现。当您完成并准备开始开发时,持久性机制和编程环境将变得相关。

在这样的系统中,通常最好在预订实体和旅行实体之间有一个明确的分隔。回答这些问题可以帮助您设计系统:

例如,旅行是否可以在目录中的任何预订之前存在? 一次旅行是否可以由多个预订共享? 如果你对这些问题回答“是”,你可以想象这样的设计:


您可以制作一个副本,并用它调整模型。

在这样的系统中,通常最好在预订实体和旅行实体之间有一个清晰的分隔。回答这些问题可以帮助您设计系统:

例如,旅行是否可以在目录中的任何预订之前存在? 一次旅行是否可以由多个预订共享? 如果你对这些问题回答“是”,你可以想象这样的设计:


你可以复制一份并用它调整模型。

问自己两个问题:

关于旅行,你需要知道什么?你能为旅行做些什么? 如上所述的预订 预订可能更为明显:谁与客户进行了预订关联,何时进行预订,是否已付款/取消/无论什么

这次旅行不太清楚。旅行是否组织有开始/结束日期的活动?每次旅行是否有最大容量,即最大预订量?。每次旅行都有价格吗?多人可以在同一次旅行中预订吗?旅行可以取消吗?取消旅行和取消预订有什么不同吗?如果旅行被取消,预订情况会怎样

第二,您如何描述如果/当预订“转换”为旅行时会发生什么。你真的只是说客户去旅行了吗?如果它转换,您是否仍然关心您捕获的所有预订信息

直觉告诉我们旅行和预订是两码事。也许转换实际上是客户和旅行之间缺少的关系,记录了客户实际旅行的时间

这将取决于是否清楚上述问题


嗯。

问自己两个问题:

关于旅行,你需要知道什么?你能为旅行做些什么? 如上所述的预订 预订可能更为明显:谁在预订时与客户建立了关联 已经付款/取消/什么的

这次旅行不太清楚。旅行是否组织有开始/结束日期的活动?每次旅行是否有最大容量,即最大预订量?。每次旅行都有价格吗?多人可以在同一次旅行中预订吗?旅行可以取消吗?取消旅行和取消预订有什么不同吗?如果旅行被取消,预订情况会怎样

第二,您如何描述如果/当预订“转换”为旅行时会发生什么。你真的只是说客户去旅行了吗?如果它转换,您是否仍然关心您捕获的所有预订信息

直觉告诉我们旅行和预订是两码事。也许转换实际上是客户和旅行之间缺少的关系,记录了客户实际旅行的时间

这将取决于是否清楚上述问题


hth.

这是一个很好的回答,我唯一的问题是缺少了什么。对我来说,似乎有一个时间点,预订要么变成旅行,要么被取消或改变。这是似乎丢失的一块。这是如何捕获的,或者我是如何在脑海中虚构的。但是预订可以被取消,在这种情况下,机票永远不会发行,是吗?预订模型可以有一个机票字段来指示机票状态。如果有复杂的机票内容不同于预订内容,那么一个单独的模式可能是合理的,但根据我所看到的事实,两者似乎非常相似。对我来说,似乎有一个时间点,预订要么变成旅行,要么被取消或改变。这是似乎丢失的一块。这是如何捕获的,或者我是如何在脑海中虚构的。但是预订可以被取消,在这种情况下,机票永远不会发行,是吗?预订模型可以有一个机票字段来指示机票状态。如果存在与预订不同的复杂票证内容,那么单独的模型可能是合理的,但基于我所看到的事实,这似乎非常相似。我的观点是正确的,但我认为我会有与构建我的域模型相同的问题。我不确定我是否同意。我认为,从概念模型开始,您将对问题域有更好的理解。你可以在问题空间中反复考虑所有可能的场景和关系。一个好的域模型可以在以后转化为数据模型。我想我的观点是正确的,但我想我会有和构建我的域模型一样的问题。我不确定我是否同意。我认为,从概念模型开始,您将对问题域有更好的理解。你可以在问题空间中反复考虑所有可能的场景和关系。一个好的域模型可以在以后转换为数据模型。我感兴趣的是乘客人数、出发时间、着陆时间、航班持续时间、取消人数、目的地、旅行里程、票价、准时到达标志、天气状况。@Mutuelinvester:那么我想你刚才回答了你自己的问题:-。事实上,你们这里大概有三门课。一个用于航班计划:预定出发/到达时间、成本、行驶里程。它代表许多航班。一个用于记录日期、实际起飞/到达时间、天气的实际航班。和一个以上的预订。从航班到预订的链接是如何确定取消选择状态为取消的所有相关预订。出于这些目的,让我们假设旅行是一个航班。我感兴趣的是乘客人数、出发时间、着陆时间、航班持续时间、取消人数、目的地、旅行里程、票价、准时到达标志、天气状况。@Mutuelinvester:那么我想你刚才回答了你自己的问题:-。事实上,你们这里大概有三门课。一个用于航班计划:预定出发/到达时间、成本、行驶里程。它代表许多航班。一个用于记录日期、实际起飞/到达时间、天气的实际航班。和一个以上的预订。从航班到预订的链接是如何确定取消选择状态=取消的所有相关预订。