Guia de Bases de Dades: INSERT amb claus foranes (Knights & Dragons)


Això és una guia per ajudar-te a començar amb aquest problema — no és la solució.

Com abordar aquest problema

Practiques INSERT en dues taules relacionades. La taula Dragons té una clau forana: la columna KilledBy ha de contenir el sobrenom (Nickname) d'un cavaller que ja existeixi a Knights. Cada pregunta és una sola sentència INSERT.

La sintaxi que necessites

INSERT INTO taula (col1, col2, col_clau_forana)
VALUES ('text', 123, 'valor_que_ja_existeix_a_l_altra_taula')
  • La llista de columnes diu quina columna rep cada valor; els VALUES van en el mateix ordre.
  • Els textos i les dates, entre cometes simples; els números, sense.
  • Si un text conté un apòstrof, s'escriu doblat: 'L''Hospitalet'.
  • Una clau forana ha de coincidir exactament (majúscules, espais...) amb la clau primària de l'altra taula.

Pregunta per pregunta

Pregunta 1. Un cavaller nou. Consulta l'esquema: totes les columnes de Knights són NOT NULL, així que les has d'omplir totes. Copia els valors amb cura, respectant majúscules i espais: el sobrenom serà la clau primària.

Pregunta 2. Un drac nou, mort per un cavaller que ja existeix. El valor de KilledBy ha de ser exactament el Nickname d'aquell cavaller. Les víctimes conegudes són un número. No depenguis del cavaller de la pregunta 1: cada pregunta es corregeix sobre la base de dades original.

Un exemple semblant

Una dama inventada:

INSERT INTO Knights (Nickname, Gender, Firstname, Lastname, Title, BirthDate, DeathDate)
VALUES ('Joana the Brave', 'F', 'Joana', 'Serra', 'Lady', '1180-03-03', '1241-09-09')

Un drac inventat, mort a mans d'un cavaller existent:

INSERT INTO Dragons (Name, Description, Color, KnownVictims, KilledBy, DeathDate, BattleOutcome)
VALUES ('Fumarola', 'A grumpy old dragon.', 'Grey', 12, 'Aelizia the Noble', '1210-07-21', 'Wounded')

Paranys habituals:

  • Escriure KilledBy amb una petita diferència respecte al Nickname real (una majúscula, un espai): ja no és el mateix cavaller.
  • Deixar sense valor una columna NOT NULL: la sentència falla.
  • Posar KnownVictims entre cometes: seria un text, no un número.
  • Repetir una clau primària que ja existeix.

Tornar al problema