2012-09-27 59 views
-1

我陷入了一個問題,我必須找到使用mysql的表之間的關係的基數。關於這篇文章
MySQL: How to determine foreign key relationships programmatically?
我發現所有與我的表和外鍵列有關的表。現在我也想找到關係的基數,即一對一,一對多或多對多。任何想法或摘錄將不勝感激如何確定使用mysql的外鍵的基數

+0

你真的需要使用相關表來計算當前的基數嗎?基數不是關於當前數據的可能值。所以,查詢應該是:'count(列中的不同值)/ count(表中的行)' – ravnur

+0

我只想找到關係是一對一,一對多還是多對多表 –

+0

如果您沒有在子表中找到並不意味着關係爲1:1的dups。與1:N,M:N一樣。換句話說,你不能確定關係類型只依賴於在子/父表中找到dups。你只能找到M:N的關係,這是正確的。其他答案會像「可能是1:1或1:N」 – ravnur

回答

4

讓我們假設表A有一個外鍵f,它是指表B的主鍵k。然後,你可以從中學到架構如下:

  • 如果在A.f一個UNIQUE約束,則可以有至多一個排AB每一行。請注意,在多列索引的情況下,唯一約束的全部列必須是外鍵的一部分。您可以使用SHOW INDEX FROM tablename WHERE Non_unique = 0獲取有關表格唯一性約束的信息。
  • 如果A.f聲明NOT NULL,那麼總會有至少一個在B排在A每一行。您可以使用SHOW COLUMNS FROM tablename列出列,並查看哪些列允許使用NULL值。

如果您解讀「一」爲「零或一」,那麼你得到採用了獨特的約束一到一個關係,以及多到一個關係(即多行在A中提到B中的一行),沒有這樣的唯一約束。

一個許多一對多關係將使用一個單獨的表,其中每一行代表關係的一個元素進行建模,用多到一個關係,爲它包含的兩個外鍵。