Visualizzazione risultati 1 fino 10 di 10

Discussione: Vincoli integrità referenziali assenti !!!

  1. #1
    Guest

    Predefinito Vincoli integrità referenziali assenti !!!

    Ciao ragazzi,

    la situazione è la seguente: Sto sviluppando in locale un sito (php+mysql e apache server). Quando importo il dump file tramite il phpadmin (in locale) vengono importati anche tutti i vincoli di integrità referenziale, ma se provo a fare la medesima operazione tramite il phpadmin di altervista l'importazione si mangia tutti i vincoli d'integrità....ossia essi risultano completamente assenti. Le tabelle e i dati invece vengono importati normalmente. Come ultimo tentativo ho eseguiito le query dei vincoli direttamente sul phpadmin di altervista, ma esso, pur non segnalando nessun errore, è come se non li vedesse....E' una limitazione del mysql di altervista???

    Ci sto diventando pazzo e non ne riesco proprio a venirne a capo....

    Un saluto a tutti.

  2. #2
    L'avatar di Gianluca
    Gianluca non è connesso Amministratore
    Data registrazione
    15-02-2001
    Messaggi
    18,035

    Predefinito

    Riporta qui le queries che hai eseguito senza successo
    Gianluca

  3. #3
    Guest

    Predefinito

    Ok. Allora prendo solo due tabelle per farti un esempio.

    CREATE TABLE `Utente` (
    `Username` VARCHAR(50) NOT NULL,
    `Password` VARCHAR(50),
    `DataRegistrazione` date default NULL,
    `Indirizzo` VARCHAR(50),
    `NumeroCivico` VARCHAR(50),
    `CAP` INT,
    `Città` VARCHAR(50),
    `Provincia` VARCHAR(50),
    `Telefono` VARCHAR(50),
    `Email` VARCHAR(50),
    PRIMARY KEY (`Username`)
    );


    CREATE TABLE `Cliente` (
    `Username` VARCHAR(50) NOT NULL,
    `Nome` VARCHAR(50),
    `Cognome` VARCHAR(50),
    `CodFiscale` VARCHAR(50),
    PRIMARY KEY (`Username`),
    FOREIGN KEY(`Username`) REFERENCES `Utente`(`Username`)
    );


    Utente è la tabella padre mentre cliente è la figlia. Esiste un vincolo di integrità referenziale tra l'attributo Username di Cliente e la chiave primaria Username di Utente (relazione 1 a 1). Quando importo le tabelle in locale funziona tutto perfettamente e cioè se provo ad inserire in Cliente un username che non è presente in Username di Utente mi dà l'avviso di violazione del vincolo. Se importo invece le tabelle in altervista i vincoli spariscono e posso tranquillamente inserire una username in Cliente che non è presente nella chiave primaria Usersname di Utente.

    Inoltre ho provato ad eseguire queste query direttamente su phpadmin:

    ALTER TABLE `Cliente` ADD CONSTRAINT `FK_Utente_Cliente` FOREIGN KEY(`Username`) REFERENCES `Utente`(`Username`);

    ma niente...i vincoli continuano a non funzionare....

  4. #4
    L'avatar di Gianluca
    Gianluca non è connesso Amministratore
    Data registrazione
    15-02-2001
    Messaggi
    18,035

    Predefinito

    Che versione di mysql hai in locale?
    Gianluca

  5. #5
    Guest

    Predefinito

    In locale ho:

    MySql 4.1.21 e PhpAdmin 2.9.1.1

  6. #6
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Forse non c'entrerà molto, ma non è che in locale stai usando InnoDB e in remoto MyISAM come tipo per le tabelle? Se è così, prova a cambiare forzatamente il tipo, scrivendo TYPE = InnoDB in coda alle query di creazione tabelle (dopo l'ultima parentesi chiusa).

    Me ne sono accorto perché mi sono trovato anch'io con questa spiacevole sorpresa quando ho dovuto presentare un progetto per l'Università usando il DB di AlterVista...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  7. #7
    Guest

    Predefinito

    In locale ho importato le tabelle esattamente come stanno scritte sopra, senza specificare InnoDB o MyISam.

    Comunqe ho provato ad aggiungere TYPE=InnoDB alla fine di ogni tabella ma nulla ! Quando provo ad importarle (o ad eseguirle direttamente) su altervista, i vincoli di integrità spariscono.

    La cosa è alquanto strana.... Chiunque di voi può provarlo a fare: fate copia ed incolla delle tabelle scritte sopra ed eseguitele nel phpadmin di altervista.Poi immettere un valore nella username di Utente e successivamente un altro valore nella username di Cliente. Dovrebbe dare l'avviso di violazione di integrità referenziale, ma nulla...non succede...e la cosa è alquanto frustrante.

    Ripeto, se importo le tabelle, esattamente come stanno scritte sopra, in locale tutto funziona normalmente ossia i vincoli vengono preservati.


    EDIT: Ho fatto un confronto tra il PhpMyAdmin locale e quello di altervista.

    Mi sono accorto che anche specificando il valore "TYPE=InnoDB" alla fine di ogni tabella, quando le importo o le eseguo direttamente su altervista, mi dà sempre TIPO=MyISAM !!! Mentre in locale il tipo è impostato su TIPO=InnoDB.

    Allora come faccio a far riconoscere al PhpMyAdmin di Altervista il tipo InnoDB ???? Visto che se anche lo specifico esplicitamente (aggiungendo alla fine di ogni tabella TYPE=InnoDB) alla fine mi da sempre TIPO=MyISAM.....


    RI-EDIT: Ho letto un articolo molto interessante:

    http://database.html.it/articoli/leg...abelle-in-m/2/

    Finalmente ho capito il problema dove sta: Come suggerito cortesemente dall'amico del post di sopra, il tutto sta nell'impostare il tipo in InnoDB.

    Ci ho provato, aggiungendo TYPE=InnoDB alla fine di ogni tabella, ma il PhpMyAdmin di Altervista mi da sempre come tipo MyISAM !

    Come posso risolvere il problema ???


    FunCool: Non scrivere dei messaggi consecutivi, utilizza il tasto Edita.
    Ultima modifica di funcool : 17-12-2006 alle ore 16.56.10

  8. #8
    Guest

    Predefinito

    MMM stavo cercando anche io il problema. Niente da fare la stragrande maggioranza dei server mysql online non supporta il motore di motorizzazione InnoDB, non viene neppure compilato all'installazione in molti casi.

    Si potrebbe proporre di attivare questa funzionalità nei successivi aggiornamenti di MySQL, anche se purtroppo lo stesso nemmeno mi andrebbe bene visto che uso solitamente database su più server(privati), compreso quello in locale(senza InnoDB) e i miei programmi devono girare su qualsiasi server senza modifiche aggiuntive.

    Per chi usa soltanto Altervista, sarebbe una soluzione...si deve vedere quanti utenti siano realmente interessati e quanta memoria occupa questo tipo di tabella.

    Detto questo, si può ovviare facilmente al problema creandoti uno script che faccia le operazioni di controllo e di aggiornamento on delete e on update..Purtroppo me lo devo fare anche io, anche se me lo sarei risparmiato volentieri. Se riesco a farne uno generico lo posto qui sopra ;).

  9. #9
    Guest

    Predefinito

    se non ricordo male, effettivamente innoDB non è istallato nel mysql.
    Qualche tempo fà è apparso un messaggio per chiedere l' attivazione

    cià!

  10. #10
    L'avatar di Gianluca
    Gianluca non è connesso Amministratore
    Data registrazione
    15-02-2001
    Messaggi
    18,035

    Predefinito

    Chiedo scusa per la non rapida replica al thread che ho perso di vista in questi giorni.
    Il supporto innoDB non è in questo momento disponibile, anche se non si esclude a priori che non verrà mai abilitato.
    Gianluca

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •