sql >> Databasteknik >  >> RDS >> Mysql

Hur testar man tabeller kopplade till främmande nycklar?

Som nämnts i kommentarerna måste du släppa alla tabeller med FK-begränsningar till andra tabeller, först, sedan kan du släppa tabellerna som länkas till.

Exempel:

User
  id: 1
  name: Mike

Address 
  id: 1
  user_id: 1 (FK constraint to User.id table.column)
  address_1: 555 Main Street

Denna inställning är en 1:1-relation (mer om datanormalisering ), där en användarrad kan referera till en adressrad, och eftersom adressraden är beroende av existensen av användarraden, om du försöker ta bort användarraden kommer du att se de fel du nämnde.

Men om du först släpper adresstabellen fungerar allt som förväntat eftersom användartabellen inte är FK till någon annan tabell.

Säkerställa referensintegritet inom ditt schema säkerställer att du inte hamnar med föräldralösa rader, vilket kommer att genomsyra hela din datadrivna applikation.

Du kan också utfärda följande kommandon:

SET foreign_key_checks = 0;
# Do Stuff
SET foreign_key_checks = 1;

Men jag skulle starkt avråda från detta, eftersom du kan bryta referensintegriteten för din data och hamna i en riktig röra. Jag har sett någon göra detta i en företagsmiljö och det tog dem veckor att rensa upp det. Men om du gör detta STRIGT för teständamål; som att skriva enhetstester, eller bara lära dig, och du inte ville släppa tabellerna varje gång, kan du göra så här:

# Because we remove the foreign key check, we can truncate in any order
SET foreign_key_checks = 0;
TRUNCATE TABLE user;
TRUNCATE TABLE address;
SET foreign_key_checks = 1;

Korrekt schemadesign med hjälp av främmande nyckelbegränsningar bidrar till att bygga en bra grund för alla datadrivna applikationer. Det kommer att ta tid att förstå när du ska använda och hur man konstruerar främmande nyckelbegränsningar, men med tiden kommer du att börja förstå. Ett bra sätt att komma igång är att ladda ner ett projekt med öppen källkod som magento , wordpress , eller vbulletin och ta en titt på deras scheman. Du kan till och med introspektera dessa scheman med MySQL-arbetsbänk och se deras Entity-Relationship Diagrams (ERD), som visuellt visar länkar mellan tabeller.




  1. Hur håller jag värdena för en kolumn unika i MySQL?

  2. C# och MySql integration

  3. Fixar trasig UTF-8-kodning

  4. Konvertera amerikanskt datumformat till ANSI SQL-datumformat (ÅÅÅÅ-mm-dd)