Този отговор приема въпроса „добавете външен ключ към table3
", което означава, че FK (външен ключ) е добавен в table3
препраща към една от колоните на съставния PK (първичен ключ) на table4
. В стандартния SQL FK може да препраща към правилно/по-малко подмножество на PK.
Този друг отговор
вероятно отнема "добавете външен ключ към table3
", което означава, че FK е добавен в table4
с една от колоните на PK, препращаща table3
. Наборът на FK колона в таблица е независим от каквито и да било PK или UNIQUE декларации в нея.
В стандартния SQL FK може да препраща към правилно/по-малко подмножество на PK.
Списъкът с реферирани колони трябва да бъде деклариран ПЪРВЕН КЛЮЧ или УНИКАЛЕН. (PRIMARY KEY създава ограничение UNIQUE NOT NULL.) (Ограничението трябва да е изрично, въпреки че всеки набор от NOT NULL колони, съдържащ набор, който е UNIQUE, трябва да бъде уникален.)
За съжаление MySQL ви позволява да декларирате FK, препращащ към списък с колони, който не е УНИКАЛЕН. Въпреки че такъв FK или такъв, който препраща към колони, различни от NULL (ОК в стандартния SQL), не е внедрен правилно и самата документация съветва да не го правите:
(Можете да обмислите точно кои са и кои не са добре дефинираните операции, тъй като документацията всъщност не изяснява.)
1.8.2.3 Разлики във външния ключ
13.1.18 СЪЗДАВАНЕ НА ТАБЛИЦА Синтаксис
13.1.18.6 Използване на FOREIGN КЛЮЧОВИ ограничения
PS Relational vs SQL
В релационния модел FK препраща към CK (кандидат ключ). Суперключът е уникален набор от колони. CK е суперключ, който не съдържа по-малък суперключ. Един CK може да се нарече PK (първичен ключ). Когато стойностите на набор от колони трябва да се появят другаде, ние казваме, че има IND (зависимост на включване). FK е IND към CK. Когато IND е към суперключ, можем да го наречем "чужд суперключ".
SQL PK
или UNIQUE NOT NULL
декларира суперключ. Това е CK, когато не съдържа по-малък набор от колони, деклариран като SQL PK
или UNIQUE NOT NULL
. SQL FK
декларира чужд суперключ. Така че SQL PK може всъщност да бъде релационен PK (следователно CK) и UNIQUE NOT NULL всъщност може да да бъдат a CK. SQL FK към един от тях всъщност е релационен FK.