这里我们使用博客系统作为示例域,并且使用一些模型来描述它。博文仅仅是博客系统的一部分。除了博文,博客系统还有博客作者、博文评论、博文标签和博文归总数据。通俗地说,域由以下实体和关系构成:
Authors
-
每位博客作者可以创建一篇或多篇博文。
Blogs
-
每篇博文由一位主要作者发布。每篇博文可以有多条评论。每篇博文可以关联一个或多个标签。每篇博文还有归总数据:关于博文的评论数、访问量等等,这些和博文内容身是独立的。
Comments
-
每条评论仅属于一篇博文。
Tags
-
每个标签都会关联一篇或多篇博文。
Summaries
-
每份归总数据仅属于一篇博文。
使用Solar术语,我们可以更专业地描述域:
-
An
Author
"has many"Blogs
。这是“一对多”关系。 -
A
Blog entry
"belongs to" anAuthor
。这是“一对一”关系。 -
A
Blog entry
"has many"Comments
。这是“一对多”关系。 -
A
Blog entry
"has many"Tags
和它关联, 同时也“属于”那些标签。这是“多对多”关系。 -
A
Blog entry
"has one"Summary line
。这是“一对一”关系。 -
A
Comment
"belongs to" aBlog entry
。这是“一对一”关系。 -
A
Tag
"has many"Blog entries
和它关联, 同时某些时候也“属于”那些博文。这是“多对多”关系。
基于这种描述,在上例中,我们发现Solar能识别的四种关系:
-
占优一对一关系(
hasOne
及其变种hasOneOrNull
); -
占优一对多关系(
hasMany
); -
从属(相互的)一对一和多对一关系(
belongsTo
); -
多对多关系。
这里的多对多关系在某些系统中被称为“has and belongs to many”。在Solar中,因为AssociationTableMapping模型的需要,我们称这种关系为hasManyThrough
。我们把Blogs
和Tags
的相互关系称为Taggings
关联模型。