Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [sql]foreign key

  1. #1

    [sql]foreign key

    domanda stupida, più dettata dallo scrupolo:

    due tabelle Impiegato e dipartimento legate da foreign key.

    la tabella interna è quella che contiene il foreign key e il reference.

    la tabella interna è impiegato e l'esterna è dipartimento

    Il vincolo può essere violato se aggiungo righe in impiegato oppure se modifico il valore dell'attributo referente che non è contenuto in dipartimento.

    Poi: in dipartimento, la modifica dell'attributo oggetto del vincolo e l'eliminazione di un valore di questo ultimo possono violare il vincolo.


    Ora: le tabelle sono vuote e devo inserire un dipendente che lavora in un dato dipartimento...come faccio senza che il vincolo venga violato???? dovrei inserire in contemporanea. Come faccio????


  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296

    Re: [sql]foreign key

    Originariamente inviato da Dorcan82
    Ora: le tabelle sono vuote e devo inserire un dipendente che lavora in un dato dipartimento...come faccio senza che il vincolo venga violato???? dovrei inserire in contemporanea.
    E' semplice: non puoi.

    Indipendentemente da come si comporterà visualmente l'applicazione che stai realizzando (suppongo che tu stia facendo questo), il dato relativo al dipartimento dovrà essere inserito per primo ottenendo inoltre il suo reference che dovrà essere utilizzato per la stesura dei dati dell'impiegato da salvare successivamente.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    quindi devo popolare prima dipartimento e poi impiegato????

    un'altra cosa: se setto un cascade, questo dovrebbe significare che se cambio il nome di un dipartimento, l'update si riperquoterà anche su impiegato con quel tipo di dipartimento????
    Quindi se informatica diventa meccanica, verranno aggiornati i dati di impiegato che contengono informatica cambiando in meccanica????

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Originariamente inviato da Dorcan82
    quindi devo popolare prima dipartimento e poi impiegato????
    Yes.

    Originariamente inviato da Dorcan82
    un'altra cosa: se setto un cascade, questo dovrebbe significare che se cambio il nome di un dipartimento, l'update si riperquoterà anche su impiegato con quel tipo di dipartimento????
    L'opzione CASCADE indica che quando cambi il valore della chiave (foreign key), il valore viene aggiornato nella tabella correlata mantenendo intatta la relazione tra i due record interessati.

    Originariamente inviato da Dorcan82
    Quindi se informatica diventa meccanica, verranno aggiornati i dati di impiegato che contengono informatica cambiando in meccanica????
    No, il campo descrittivo non c'entra nulla, perchè non è quel campo che stabilisce la relazione bensì il campo scelto come chiave, che preferibilmente dovrebbe essere numerico...a meno che tu non abbia impostato il campo descrittivo ("informatica", "meccanica", ecc.) come campo chiave (foreign key).

    Comunque, specifica sempre il database su cui lavori nelle tue domande.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    si la chiave è il nome del dipartimento.


  6. #6
    uso MySQL, ma a quanto pare non supporta i vincoli di integrità referenziale

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Originariamente inviato da Dorcan82
    si la chiave è il nome del dipartimento.
    Non è una buona scelta: è preferibile usare un campo numerico, magari autoincrementale, invece di un campo alfanumerico.

    Qual è il vantaggio - in questo caso - di utilizzare una tabella esterna se l'informazione più ingombrante, cioè il campo descrittivo, viene replicata per ogni record della tabella dipendente (quella degli impiegati)?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    Originariamente inviato da Dorcan82
    uso MySQL, ma a quanto pare non supporta i vincoli di integrità referenziale
    Devi usare le tabelle InnoDB, se vuoi l'integrità referenziale.

    codice:
    CREATE TABLE foo (
      fooID int(11) NOT NULL auto_increment,
      depID int(11),
      PRIMARY KEY (userID),
      KEY depID (depID),
      FOREIGN KEY (depID) REFERENCES department (depID)
    ) TYPE=InnoDB;
    ma non supporta questa sintassi standard

    codice:
    CREATE TABLE foo (
      fooID int(11) NOT NULL auto_increment,
      depID int(11) references department (depID)
    ) TYPE=InnoDB;

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 © 2024 vBulletin Solutions, Inc. All rights reserved.