为什么在1:1关系中有独特的良好做法?

时间:2014-03-27 13:44:33

标签: grails gorm

在Grails文档中:http://grails.org/doc/2.3.x/guide/GORM.html 它说在1:1中添加一个独特的约束是很好的做法 因此,如果一张脸有一个鼻子,我们应该这样做:

class Face {
    static hasOne = [nose:Nose]
    static constraints = {
        nose unique: true
    }
}

但为什么?当然,约束隐含在基数中吗?

那我们为什么要这样做呢?

2 个答案:

答案 0 :(得分:3)

放置唯一约束的原因是为了确保两个面具有相同的鼻子。由于这是1:1的关系,鼻子的Id保持在脸上。这就是原因。

答案 1 :(得分:1)

确保只有一个鼻子知道当前的脸部。

没有这个约束:

Face face = new Face();
Nose nose1 = new Nose();
face.nose = nose1;
face.save(flush: true);

Nose nose2 = new Nose();
face.nose = nose2;
face.save(flush: true); // no error, but in DB, nose1 and nose2 reference the same face_id