Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    598

    foreign key su 2 tabelle differenti

    Salve, ho nel mio db ho 3 tabelle:

    opera (nome, autore,stanza) con chiave nome
    stanza (id, piano) con chiave id
    autore (nome,cognome,cf) con chiave cf

    ora devo creare le tabelle usando sql:

    create table if not exists stanza (
    id varchar (10) primary key,
    piano numeric (1)
    );

    create table if not exists autore (
    nome varchar (20),
    cognome varchar (30),
    cf char (16) primary key
    );

    create table if not exists opera (
    nome varchar (20) primary key,
    autore varchar (30) references autore(cf),
    stanza (varchar (10) references stanza (id)
    foreign key (autore, stanza)
    );

    solo che inserendo foreign key (autore, stanza) mi da errore, come devo dire a mysql che autore e stanza sono chiavi esterne nella tabella autore e stanza?
    Foreign key Non è il giusto comando?
    Soffrire sempre mollare mai

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    598
    Quote Originariamente inviata da optime Visualizza il messaggio
    Grazie ma ho seguito questa pagina, con una tabella funziona, se le key sono di due tabelle diverse ricevo errore....
    Soffrire sempre mollare mai

  4. #4

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    598
    Ecco cosa ho scritto:

    create database if not exists test;
    use test;

    create table if not exists stanza (
    id varchar (10) primary key,
    piano numeric (1)
    );

    create table if not exists autore (
    nome varchar (20),
    cognome varchar (30),
    cf char (16) primary key
    );

    create table if not exists opera (
    nome varchar (20) primary key,
    autore varchar (30) references autore(cf),
    stanza varchar (10) references stanza (id),
    foreign key (autore, stanza)
    );

    ricevo:
    Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 6


    autore e stanza vengono creati....
    Soffrire sempre mollare mai

  6. #6
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da globalace Visualizza il messaggio
    Ecco cosa ho scritto:

    create table if not exists autore (
    .................
    cf char (16) primary key


    create table if not exists opera (
    ........
    autore varchar (30) references autore(cf),
    .........
    Ora, io non conosco MySql con la sua sintassi eccetera, ma ......

    Nella tabella "autore" hai come key il campo "cf" --- char(16)
    Nella tabella "opera" fai riferimento al campo "cf" --- varchar(30) ????

    ti stai "sconfondendo" con il cognome



    In linea piu generale prendere il codice fiscale come campo Key è sempre un errore
    perche non è un unovoco come quasi tutti ritengono
    https://it.wikipedia.org/wiki/Omocodia

    .

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    598
    Ciao, grazie per la risposta, relativamente a ciò che mi hai fatto notare ho corretto:
    create table if not exists autore (
    nome varchar (20),
    cognome varchar (30),
    cf char (16) primary key
    );

    create table if not exists opera (
    nome varchar (20) primary key,
    autore char (16) references autore(cf),
    stanza varchar (10) references stanza (id),
    foreign key (autore, stanza)
    );

    Ma continua a darmi lo stesso errore, per l'omocodia, si tratta di un semplice esempio per esercitarsi sulla creazione delle tabelle, comunque grazie ne terrò conto andando avanti!
    Soffrire sempre mollare mai

  8. #8
    proverei con

    create table if not exists opera (
    nome varchar (20) primary key,
    autore char (16),
    stanza varchar (10),
    foreign key (autore) references autore(cf),
    foreign key (stanza) references stanza (id)
    );

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    598
    Quote Originariamente inviata da optime Visualizza il messaggio
    proverei con

    create table if not exists opera (
    nome varchar (20) primary key,
    autore char (16),
    stanza varchar (10),
    foreign key (autore) references autore(cf),
    foreign key (stanza) references stanza (id)
    );
    Grazie! funziona!
    Soffrire sempre mollare mai

  10. #10

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