我正在使用3NF在grails中实现多对多映射, 不使用hasMany或belongsTo属性。
从这篇文章中可以看出并解释了很多关于它的优点。
文章:http://burtbeckwith.com/blog/?p=169
演示说明:http://burtbeckwith.com/blog/files/169/gorm%20grails%20meetup%20presentation.pdf
我正在尝试将一个Tag系统放到问题上,有点像这样(stackoverflow:))
我可以保存问题和标签,然后保存与它们的关联, 但现在我希望能够使用标签
搜索并提供完整的问题我有3个域类 - 问题,标签和问题标签
class Question {
String title
String content
Date createdAt
String tags
static transients = ['tags']
}
标记类
class Tag {
String name
static constraints = {
name(blank: false, maxSize: 40)
name(unique: true)
}
}
QuestionTag Class
class QuestionTag implements Serializable{
Question question
Tag tag
static mapping = {
table 'question_tags'
version false
id composite: ['question', 'tag']
}
这些产生了3个表,以3标准化形式
保存工作,问题和标签数量。
def question = new Question()
question.properties = params
question.save()
def tags = question.tags
tags.split(' ')?.each { tagName ->
Tag tag = Tag.findByName(tagName) ?: new Tag(name: tagName).save()
QuestionTag questionTag = new QuestionTag(question: question, tag: tag)
QuestionTag.save(flush: true)
}
Q.1 如何加载“问题”及其“标签”集?如果有5个标签与问题相关联。
现在我安装了“可搜索”插件,我将“static searchable = true”应用于所有三个类。但是当我将该属性添加到QuestionTag类时,我收到编译错误, 思考与缺乏“hasMany”有关,
No converter defined for type [com.app.Question]
Q.2 如果我添加“hasMany”,它会在引擎盖下生成另一个表,但我已经定义了自己的表。或者它会引用我制作的QuestionTag表吗?
Q.3 无论如何,使用3NF我可以搜索标签和问题全文,然后返回与标签或文字匹配的搜索关键字相关的问题。