Mysql

了解多對多關係中的連結表

  • July 25, 2020

我仍在使用 MySQL 開發照片儲存應用程序(為儲存的照片的數據設計數據庫),並被告知一張照片中可能有一個或多個人,一個人可能在許多照片中,這是有道理的。

我的問題是了解照片和人物表之間的連結表的屬性。我已經建立了一個連結表,其中兩個表(照片和人)的 PK 作為連結表的複合 PK。此表中的兩組 PK 都設置為 Not Null(由我),但該項目隨後規定,即使他們不在照片中,人們也可以在數據庫中,我想知道這如何與 NN 設置相符複合PK。當然,如果它必須是 NN,這意味著它不能允許有任何條目,其中我只有照片的 PK,而連結表的人部分則沒有?還是我完全誤解了這些關係是如何運作的?如前所述,我正處於學習數據庫的早期階段。

實際上,對於不在場的人,您不需要特殊的價值

當您選擇一張照片並且您不知道其中是否沒有任何人時,您會

SELECT p.*,pe.*
FROM Photo p 
  LEFT JOIN reftable r ON p.id = r.p_id 
  LEFT JOIN peope pe ON  r.pe_id = pe.id 
WHERE p.id = 123

因此,即使關係表中沒有條目,您也會得到一張照片。

如果您有一個人並想查找他們所在的所有照片

SELECT pe.*,p.*
FROM peope pe  
  INNER JOIN reftable r ON r.pe_id = pe.id
  INNER JOIN Photo p  ON p.id = r.p_id  
WHERE pe.id = 123

你需要一個關係表,因為很多人可能在一張照片上,或者一個人可以在很多張照片中

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