在 Grails/Gorm 中,我存储了一个物理站点,该站点将对象保存在定义的位置。
域类只是:
示例 A
站点数据中心
- 网站名称
- 位置图(1:狗,2:猫,3:foo,4:bar,...最多平均 30 个项目)
...但是对象改变了它们的位置,我以后需要能够看到在给定时间(WHEN)占据了哪些位置。
因此我添加了另一个域类
示例 B
职位 DC
- 有效自
- 有效
- 位置图(1:狗,2:猫,3:foo,4:bar)
- 属于SITE
站点数据中心
- 网站名称
由于所有对象都会有描述,并且会有大量使用相同对象的站点,因此我添加了一个域类来保存每个对象。结果:
示例 C
对象直流
- 姓名
- 描述
职位 DC
- 有效自
- 有效
- 位置图(1:reference_to_dog,2:reference_to_cat,3:reference_to_foo,4:reference_to_bar)
- 属于SITE
站点数据中心
- 网站名称
现在,对我来说,地图似乎不再合理。
我正在考虑删除地图,用另一个域类替换它:
示例 D
对象直流
- 姓名
- 描述
对象到位置 DC
- 位置编号 (1, 2, 3, 4, ...)
- 对象(reference_to_cat,reference_to_dog,reference_to_foo,...)
- 属于POSITIONS
职位 DC
- 有效自
- 有效
- 属于SITE
站点数据中心
- 网站名称
问题
- 将地图放入数据库通常是好还是坏?
- 这怎么能更容易实现?
- 最高效的方法是什么?
编辑:基于 ROBS 答案的新方法
受您的建议 Rob 的启发,我起草了这个数据模型,该模型赋予“SeasonPlan”(修改后的“ResidenceHistory”)一个“前排”角色。
class Zoo {
static hasMany = [seasons: SeasonPlan]
String name
}
// one way of representing histories
class SeasonPlan = {
static belongsTo = [zoo: Zoo] // a SeasonPlan belongs to a single particular Zoo
static hasMany = [cages: Cage]
DateTime from
DateTime until
}
class Cage {
static belongsTo = [seasonPlan: SeasonPlan] // a cage belongs to a single seasonplan
Species species // a cage has a single Species
Integer cageNumber
}
class Species {
// static hasMany = [cages: Cage] // commented out - no reverse-lookup necessary
String name
}
这有一个缺点:每个赛季计划都有一个新的笼子 - 尽管实际上笼子保持不变!(想象一下“笼子”中有一个“整数平方米”,以更清楚地说明为什么不希望这样做。)
对我来说,将这样的东西应用于数据模型通常很难理解——我如何将这样的“伪静态”数据放入应用程序中,同时保持真实世界的相关性?
我希望我的意思是可以理解的——如果不是,对不起。