首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy与域类中的表关系--如何对其进行分类和持久化?

Groovy与域类中的表关系--如何对其进行分类和持久化?
EN

Stack Overflow用户
提问于 2011-01-10 12:33:55
回答 1查看 500关注 0票数 0

在Grails/Gorm中,我正在存储一个物理站点在定义的位置中保存对象

域类只需:

例A

现场直流

  • sitename
  • positionmap (1:狗,2:猫,3:foo,4:酒吧,.(平均30项)

..。但是对象改变了它们的位置,以后我需要能够看到在给定的时间(什么时候),哪些位置被什么占据了。

因此,我添加了另一个域类。

例B

位置直流

  • validfrom
  • validto
  • positionmap (1:狗,2:猫,3:foo,4:bar)
  • belongsTo SITE

现场直流

  • sitename

因为所有的对象都有一个描述,并且会有大量的站点使用相同的对象,所以我添加了一个域类来保存每个对象。结果:

示例C

目标直流

  • name
  • description

位置直流

  • validfrom
  • validto
  • positionmap (1: reference_to_dog,2: reference_to_cat,3:reference_to_foo,4:reference_to_bar)
  • belongsTo SITE

)

现场直流

  • sitename

现在地图,对我来说,似乎不再合理。

我正在考虑删除映射,代之以另一个域类:

示例D

目标直流

  • name
  • description

目标对位置直流

  • positionnumber (1,2,3,4,.)
  • 对象(reference_to_cat,reference_to_dog,reference_to_foo,

)

位置直流

  • validfrom
  • validto
  • belongsTo站点

现场直流

  • sitename

问题

在database?

  • How中放置地图通常是一个好/坏的主意吗? easier?

  • What's是最有效的方法吗?

编辑:基于ROBS答案的一种新方法

在你的建议的启发下,罗布,我起草了这个数据模型,赋予"SeasonPlan“(修正的"ResidenceHistory")一个”前排“角色。

代码语言:javascript
复制
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
}

这有一个缺点:每个赛季的计划都有一个新的笼子--尽管在现实中,笼子是一样的!(想象一下"Cage“中的"Integer squareMeters”,以便更清楚地说明为什么不需要这样做。)

对我来说,将这样的东西应用到数据模型中常常很难理解--,我如何将像这样的“伪静态”数据安装到应用程序中,同时保持现实世界中的相关性?

我希望我的意思是可以理解的-抱歉,如果不是。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-10 13:22:49

我还在努力理解你的领域,你可能把事情搞得太复杂了。这个基本的模型能起作用吗?如果没有,你能解释原因吗?如果我能更好地理解你的情况,我会更新我的例子。

编辑-更新的例子给出下面的评论。

代码语言:javascript
复制
class Cage {
    static belongsTo = [zoo: Zoo] // a cage belongs to a single particular Zoo
    Species species // a cage has a single Species
    String name
}

class Zoo {
    static hasMany = [cages: Cage]
    String name
}

class Species {
    static hasMany = [cages: Cage] // a species can be in many different cages
    String name
}

// one way of representing histories
class ResidenceHistory = {
    Species species
    Cage cage
    DateTime from
    DateTime until
}

下面是如何使用域的方法:

代码语言:javascript
复制
def sanDiego = new Zoo(name: 'San Diego Zoo').save()
def aviary = new Cage(name: 'Aviary', zoo: sanDiego).save()
def elephantCage = new Cage(name: 'Elephant Area, Cage 5', zoo: sanDiego).save()

def bird = new Species(name: 'Blue-Footed Booby', cage: aviary).save()
def elephant = new Species(name: 'Asian Elephant', cage: elephantCage).save()

new ResidenceHistory(species: bird, cage: aviary, from: new DateTime(), to: new DateTime().plusDays(20)).save()

要回答您列出的问题,具体如下:

这取决于

  1. -通常我更喜欢使用数据库的关系功能,而不是将映射存储在数据库中。如果原始数据不是序列化的Java对象,那么处理它们就容易多了。
  2. 见上面的例子。
  3. ,这不重要,除非性能成为一个问题。使用最有意义且最容易维护的解决方案,如果发现它会导致性能问题,请分析应用程序并单独修复问题。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4646855

复制
相关文章

相似问题

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