多對多拆成兩個 多對一

2022-05-06 12:39:09 字數 618 閱讀 6023

今天就談談使用多對多的感想。

多對多的用處有很多,比如專題和文章,這是常用的新聞系統。乙個專題下有很多文章,同樣乙個文章可以屬於多個專題,那麼這就是多對多,

但是如果我們使用hibernate的多對多的話,會出現兩個嚴重的問題:

1)多對多基於中間表,那麼中間表是無法操作的。你無法查詢出該專題下的所有文章來,因為你無法對集合分頁。

2)採用中間表,中間表無法操作。你無法給這個中間表中加任何多餘的但是你常用的業務屬性。因為不是乙個實體類。

所以,基於以上兩點缺點,我們往往將多對多改成兩個一對多,這樣就相當於將中間表也拿出乙個實體類了,你不但可以分頁,也可以加任何你想要加的其他業務屬性。

但是注意,在加其他業務屬性的時候,一定要注意適可而止。以為你一旦使用了中間表為實體類,那麼你就必須在操作兩端的時候都切忌要操作中間表這個實體類,比如你在中間實體類中加入了乙個新聞標題這個屬性(為什麼要加這個業務屬性,因為在查詢中間表的時候,不想要級聯,最好就將常用的屬性,查詢所有list的時候常用的屬性都放進去,這樣你就不用進行級聯了),那麼你在修改了這個新聞的時候,必須記得將該中間實體類的有關記錄進行修改。

但是由於在平時操作中,查詢是經常的,而增加刪除修改相對於查詢是少的多,所以為了不級聯操作而增加適當的業務屬性是可用的。

Django ORM 一對多 和 多對多

在 models.py 上定義 class province models.model name models.charfield max length 32 def str self return self.name class city models.model name models.char...

雙向多對多

雙向多對多會通過乙個中間表來維持關聯關係 雙向多對多關係中必須指定乙個關係維護端 否則中間表裡會出現主鍵重複的問題 例如 標籤類tags和商品類goods 乙個標籤可對應多種商品 乙個商品也能有多個標籤 首先在兩個類中各建乙個對方型別的set作屬性 用到的註解解釋 商品類goods 需要用 join...

mysql一對多怎麼聚合多 mysql多對多

中間表跟兩張表都分別是一對多關係,中間表是多,兩張表分別是1.原因是乙個教師在中間表中可以有多個t id 教師t id 而乙個t id只能對應乙個教師。2.外來鍵可以是一對一的,乙個表的記錄只能與另乙個表的一條記錄連線,或者是一對多的,乙個表的記錄與另乙個表的多條記錄連線。1.一對多,在多的一方建立...