“hasMany”属于哪个范围?

Gar*_*orn 4 database-design terminology relational-theory

我意识到,在谈论结构时,显然如果您说“post hasMany comments”,那么与每个post相关的评论的记录有很多。

我不明白这些术语是在什么上下文中使用的。我主要只在 DBAL 中思考或谈论设计。无论如何,当一件事“ hasMany ”另一件事时,它如何以及在哪里出现?

jco*_*and 6

在任何情况下,当一件事有许多另一件事时,它如何/在哪里显示在应用程序和数据库逻辑中?

我想回答这个问题的唯一方法是使用另一个 hasMany 示例,它可能会也可能不会回答您的问题。

使用帖子和评论的 hasMany 示例

错误,除了我应该称表格为“评论”,但我认为这一点是成立的。

我不知道这是否真的比你已有的更能帮助你理解。

因此,我还将分享一个查询,它可能会演示这是如何工作的:

declare @var char(5)
set @var = 'query'

select
   c.id
  ,c.text
  ,c.author
from comment c
inner join post p
   on p.id = c.parentid
Run Code Online (Sandbox Code Playgroud)

我们期望返回多行,因为一个帖子通常有很多评论(理论上,当然不是所有帖子都会有评论)


更新:

所以这里是关于关系的事情:它们很容易通过图表建模(请参阅我为回答这个问题而拿出的第一个工具),但它们很难通过文本进行图表化。因此,与其试图定义我们的意思是 1:M 还是 0:N,我们只是用“接近英语”来写,然后说出我们的意图。这里有一些替代方案:

one to one           hasOne               post hasOne author (not true for CW ;])
one to many          hasMany              The one in question
many to one          belongsTo            parent child, comments belongTo post
many to many         hasAndBelongsToMany  This describes a complex relationship
many to many to many hasManyAndBelongsToMany
Run Code Online (Sandbox Code Playgroud)

如您所见,它们可能会变得非常复杂。这会……再一次!...表示需要将您的业务逻辑重构为更简单和更小的块。

这些也可以称为“关联类型”,可以用“WrittenBy”(多对一)或“IsOwnedBy”(一对一? - 上下文是关键)之类的词语表示

在我最后一次离开“hasMany”概念之前(这一个更新,可能会写更多)我想提一下,虽然它对“简单的英语描述”很有用,但它也用于 ActiveRecord 风格的安装。以红宝石为例。http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html这篇文章的其余部分(到目前为止)取自该页面:

class Project < ActiveRecord::Base
  belongs_to              :portfolio
  has_one                 :project_manager
  has_many                :milestones
  has_and_belongs_to_many :categories
end
Run Code Online (Sandbox Code Playgroud)

这允许 ActiveRecord ORM 创建数据模型并维护程序中业务逻辑指定的关系。但我不会写 Ruby 或 Rails,所以据我所知,我只知道它存在于那里。

  • 这是一种关系,是描述评论与帖子关系的术语,因此您知道每个帖子可以有多个评论。否则评论表中的 post_id 将是唯一的 (2认同)