0
我得到一個不是由我設計的E-R模型。但我無法聯繫作者。 在這個模型中有一些讓我困惑的東西。 在表A中,主鍵是一個整數字段。表B有一個引用了A的PK的外鍵。但是B的這個FK是一個varchar字段。 我剛開始學習數據庫設計,在我的工作中從未看到或做過這些事情。 合理和可實現嗎? 請注意,該模型是爲MySQL。外鍵的字段類型是否可以與引用的主鍵不同?
我得到一個不是由我設計的E-R模型。但我無法聯繫作者。 在這個模型中有一些讓我困惑的東西。 在表A中,主鍵是一個整數字段。表B有一個引用了A的PK的外鍵。但是B的這個FK是一個varchar字段。 我剛開始學習數據庫設計,在我的工作中從未看到或做過這些事情。 合理和可實現嗎? 請注意,該模型是爲MySQL。外鍵的字段類型是否可以與引用的主鍵不同?
這不能作爲InnoDB中的FOREIGN KEY約束實現;外鍵列的數據類型必須與引用列的數據類型完全匹配。
雖然需要在一側或另一側進行數據類型轉換,但您可以在列上執行連接操作。
ON c.character_col + 0 = p.numeric_col
在SQL中允許這樣做;我們不必爲了執行連接操作而定義FOREIGN KEY約束。
這種設計不是我們喜歡看到的;其中一個重要問題是性能,因爲MySQL無法有效使用character_col
上的索引。
外鍵不必引用父表的主鍵。外鍵可以引用表中的任何鍵。難道是B中的外鍵真的引用A中的varchar列而不是A的主鍵? – sqlvogel