Database-Design

“hasMany”屬於什麼範圍?

  • June 5, 2011

我意識到,在談論結構時,很明顯,如果您說*“post hasMany comments”,則有很多關於與每個文章相關的**評論*的記錄。

我不明白這些術語在什麼上下文中使用。我主要考慮的是 DBAL 或談論設計。無論如何,當一個事物“ hasMany ”的另一個事物如何以及在哪裡出現?

在任何情況下,當一個事物有很多另一個事物時,它在應用程序和數據庫邏輯中是如何/在哪裡出現的?

我能想到回答這個問題的唯一方法是使用另一個可能會或可能不會回答您的問題的 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

我們期望返回很多行,因為一個文章通常有很多評論(理論上,當然不是所有文章都會有評論)


更新:

所以這是關於關係的事情:它們很容易通過圖表建模(請參閱我為回答這個問題而拿出的第一個工具),但它們很難通過文本繪製圖表。因此,與其試圖定義我們的意思是 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

如您所見,它們可能會變得非常複雜。這將……再一次!…表明需要將您的業務邏輯重構為更簡單和更小的塊。

這些也可以稱為“關聯類型”,並且可以用諸如“WrittenBy”(多對一)或“IsOwnedBy”(一對一?-上下文是關鍵)之類的動詞來表示

在我最後一次擺脫“hasMany”概念之前(這一個更新,可能會寫更多)我想提一下,雖然它對“簡單的英語描述”很有用,但它也用於 ActiveRecord 風格的安裝。以 Ruby 為例。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

這允許 ActiveRecord ORM 創建數據模型並維護程序中業務邏輯指定的關係。但我不寫 Ruby 或 Rails,所以據我所知,我只知道它存在於那裡。

引用自:https://dba.stackexchange.com/questions/3154