sql >> Databasteknik >  >> Database Tools >> phpMyAdmin

Hur ställer man in en främmande nyckel som är beroende av relationen mellan andra två tabeller?

Jag använder inte phpmyadmin, men jag skulle börja med

  • en unik begränsning för subjects.name,
  • en unik begränsning för paret {teachers.name, teachers.subject_id},
  • en unik begränsning för {events.venue, events.subject_id, events.teacher_id},
  • en unik begränsning för paret {teachers.id, teachers.subject_id}.

De tre första har med identitet att göra; den sista låter dig rikta in dig på {teachers.id, teachers.subject_id} med en främmande nyckel-begränsning.

I det allmänna fallet är människors namn inte unika. Så du kunde har två lärare med samma namn som undervisar i samma ämne. Hur du kan närma dig den typen av problem är applikationsberoende.

Sedan främmande nycklar

  • från teachers.subject_id till subjects.id och
  • från {events.teacher_id, events.subject_id} till {teachers.id, teachers.subject_id}

Det kommer åtminstone att ge dig ett fel om du försöker infoga en lärare med fel ämne i händelser.

Du måste använda INNODB-motorn för att upprätthålla begränsningar för främmande nyckel. Andra motorer kommer att analysera dem, men ignorera dem.

Klausulerna FOREIGN KEY och REFERENCES stöds av InnoDBstorage-motorn, som implementerar ADD [CONSTRAINT [symbol]] FOREIGN KEY[index_name] (...) REFERENCES ... (...). Se avsnitt 14.6.6, "InnoDBand FOREIGN KEY Constraints". För andra lagringsmotorer tolkas satserna men ignoreras.




  1. Importera databaser och tabeller med phpMyAdmin

  2. Ändra CommandTimeout i SQL Management studio

  3. Finns det ett snabbt sätt att uppdatera många poster i SQL?

  4. Kan du anpassa ett mysql_error duplicate felmeddelande?