sql >> Database teknologi >  >> RDS >> Mysql

Hvordan tester man tabeller forbundet med fremmednøgler?

Som nævnt i kommentarerne skal du droppe alle tabeller med FK-kontraint til andre tabeller, først, så kan du droppe de tabeller, der linkes til.

Eksempel:

User
  id: 1
  name: Mike

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

Denne opsætning er et 1:1 forhold (mere om datanormalisering ), hvor én brugerrække kan referere til én adresserække, og fordi adresserækken er afhængig af eksistensen af ​​brugerrækken, vil du se de fejl, du nævnte, hvis du forsøger at fjerne brugerrækken.

Men hvis du først slipper adressetabellen, fungerer alt som forventet, fordi brugertabellen ikke er FK til nogen anden tabel.

Sikring af henvisningsintegritet inden for dit skema sikrer, at du ikke ender med forældreløse rækker, som vil gennemsyre hele din datadrevne applikation.

Du kan også udstede følgende kommandoer:

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

Men jeg vil kraftigt fraråde dette, da du kan bryde din datas referenceintegritet og ende i et rigtigt rod. Jeg har set nogen gøre dette i et virksomhedsmiljø, og det tog dem uger at rydde op i det. Men hvis du gør dette STRENGT til testformål; som at skrive enhedsprøver eller bare lære, og du ikke ønskede at droppe tabellerne hver gang, kunne du gøre dette:

# 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 skemadesign ved hjælp af fremmednøglebegrænsninger er med til at bygge et godt grundlag for enhver datadrevet applikation. Det vil tage tid at finde ud af, hvornår du skal bruge, og hvordan du konstruerer fremmednøglebegrænsninger, men med tiden vil du begynde at forstå. En god måde at komme i gang på er at downloade et open source-projekt som magento , wordpress , eller vbulletin og tag et kig på deres skemaer. Du kan endda introspektere disse skemaer ved hjælp af MySQL workbench og se deres Entity-Relationship Diagrammer (ERD'er), som visuelt viser forbindelser mellem tabeller.




  1. ORA-12505, TNS:listener kender i øjeblikket ikke til SID givet i forbindelsesbeskrivelsen

  2. Sådan opretter du ordenstal i PostgreSQL

  3. PG::Fejl i GROUP BY-klausul

  4. Hvorfor cast/konvertere fra int returnerer en stjerne