Mysql
 sql >> база данни >  >> RDS >> Mysql

Само един ключ от съставен първичен ключ като външен ключ

Този отговор приема въпроса „добавете външен ключ към 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. създайте форматирана електронна таблица в Excel с MySQL данни и PHP с помощта на таблици

  2. Как да завъртите схема на MySQL обект-атрибут-стойност

  3. php не предава променливи

  4. MySQL - достигнато е числова връзка

  5. Yii Обединена таблица, но не всички избрани данни се извличат