Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [MySQL] Chiarimenti su Foreign Key

    Salve, da ieri ho cominciato a studiare mySQl... e avrei qualche domanda da porvi...
    Ho creato questo script (se così si chiama):



    codice:
    CREATE DATABASE IF NOT EXISTS mydb;
    USE mydb;
    
    
    CREATE TABLE IF NOT EXISTS MATERIE (
        id_materia INT NOT  NULL PRIMARY KEY,
        nome_materia VARCHAR(45) NOT NULL
        )  ENGINE = INNODB; 
        
    
    CREATE TABLE IF NOT EXISTS DOCENTI (
        matricola INT NOT NULL PRIMARY KEY,
        materia INT NOT NULL,
        eta INT NOT NULL,
        stipendio INT NOT NULL,
        FOREIGN KEY (materia) REFERENCES MATERIE (id_materia)
    
        ) ENGINE = INNODB;
     
    INSERT INTO `mydb`.`MATERIE` (`id_materia`, `nome_materia`) VALUES (901, 'informatica');
    INSERT INTO `mydb`.`MATERIE` (`id_materia`, `nome_materia`) VALUES (902, 'basi_di_dati');
    INSERT INTO `mydb`.`MATERIE` (`id_materia`, `nome_materia`) VALUES (903, 'telematicuno');
    INSERT INTO `mydb`.`MATERIE` (`id_materia`, `nome_materia`) VALUES (904, 'telematica');
    
    
    INSERT INTO `mydb`.`DOCENTI` (`matricola`, `materia`, `eta`, `stipendio`) VALUES (1, 901, 35, 35000);
    INSERT INTO `mydb`.`DOCENTI` (`matricola`, `materia`, `eta`, `stipendio`) VALUES (2, 902, 45, 1500);
    INSERT INTO `mydb`.`DOCENTI` (`matricola`, `materia`, `eta`, `stipendio`) VALUES (3, 903, 45, 45000);
    INSERT INTO `mydb`.`DOCENTI` (`matricola`, `materia`, `eta`, `stipendio`) VALUES (4, 904, 45, 2000);
    
    
    SELECT *  
    FROM   MATERIE, DOCENTI 
    WHERE  MATERIE.id_materia = DOCENTI.materia AND stipendio>4000 AND nome_materia = 'informatica';
    Ora non ho ben capito la funzione che svolgono le foreign key...Intanto vorrei capire se le ho assegnate correttamente, e poi non ho capito l'utilità in quanto se le ometto..la query funziona lo stesso.

    Confido in un un vostro aiuto, grazie tante.
    Davide

  2. #2
    Ciao,
    scusa ma credo che prima di tutto tu debba studiare un po i fondamenti delle basi di dati. Magari con qualche libro oppure sugli appunti dei corsi dei docenti universitari.

    E' un po' inutile infatti imparare il linguaggio SQL, l'ambiente MySql (o qualasiasi altro ambiente) senza sapere cosa sono le chiavi esterne...

  3. #3
    Leggendo ho capito cosa sono, ma non ho capito bene concretamente quando vengono impegate...
    Comunque grazie per la risposta...

  4. #4
    nell'esempio che hai fatto te:

    Professore - Materia

    Hai utilizzato correttamente le chiavi esterne.

    In poche parole serve per non ripetere lo stesso dato su n tabelle diverse e, collegato a questo, per non avere inconsistenza dei dati nel caso in cui tu faccia una modifica, nel nostro esempio, alla tabella Materia.

    Collegando Prof a Materia tramite id_materia se per caso in futuro la materia Storia diventa "Storia antica", potrai aggiornare la tabella Materia senza doverti preoccupare della tabella Prof perché in Prof non c'è nessun dato "Storia" ma solo un id che si ricollega alla tabella Materia.

    Inoltre, eccezion fatta per i valori NULL (quello che scrivevi te "se non metto niente in id_materia funziona lo stesso"), con l'uso delle chiavi esterne "limiti" i possibili valori che puoi assegnare a id_materia su Prof. Se su materia hai "Italiano", "Storia","Geografia" ognuna con i propri id 1,2,3 non puoi associare nessun prof all'id 4 in quanto inesistente nella tabella referenziata.

  5. #5
    Grazie, mi sei stato di grande aiuto..

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.