-1
我陷入了一個問題,我必須找到使用mysql的表之間的關係的基數。關於這篇文章
MySQL: How to determine foreign key relationships programmatically?
我發現所有與我的表和外鍵列有關的表。現在我也想找到關係的基數,即一對一,一對多或多對多。任何想法或摘錄將不勝感激如何確定使用mysql的外鍵的基數
我陷入了一個問題,我必須找到使用mysql的表之間的關係的基數。關於這篇文章
MySQL: How to determine foreign key relationships programmatically?
我發現所有與我的表和外鍵列有關的表。現在我也想找到關係的基數,即一對一,一對多或多對多。任何想法或摘錄將不勝感激如何確定使用mysql的外鍵的基數
讓我們假設表A
有一個外鍵f
,它是指表B
的主鍵k
。然後,你可以從中學到架構如下:
A.f
一個UNIQUE
約束,則可以有至多一個排A
在B
每一行。請注意,在多列索引的情況下,唯一約束的全部列必須是外鍵的一部分。您可以使用SHOW INDEX FROM tablename WHERE Non_unique = 0
獲取有關表格唯一性約束的信息。A.f
聲明NOT NULL
,那麼總會有至少一個在B
排在A
每一行。您可以使用SHOW COLUMNS FROM tablename
列出列,並查看哪些列允許使用NULL
值。如果您解讀「一」爲「零或一」,那麼你得到採用了獨特的約束一到一個關係,以及多到一個關係(即多行在A
中提到B
中的一行),沒有這樣的唯一約束。
一個許多一對多關係將使用一個單獨的表,其中每一行代表關係的一個元素進行建模,用多到一個關係,爲它包含的兩個外鍵。
你真的需要使用相關表來計算當前的基數嗎?基數不是關於當前數據的可能值。所以,查詢應該是:'count(列中的不同值)/ count(表中的行)' – ravnur
我只想找到關係是一對一,一對多還是多對多表 –
如果您沒有在子表中找到並不意味着關係爲1:1的dups。與1:N,M:N一樣。換句話說,你不能確定關係類型只依賴於在子/父表中找到dups。你只能找到M:N的關係,這是正確的。其他答案會像「可能是1:1或1:N」 – ravnur