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

    relazioni Access: sono utili in siti ASP???

    ciao, ho letto qualche discussione qua nel forum e in un post di diceva che in un sito fatto in ASP-Access le relazioni appesantiscono solo il carico del database.

    effettivamente tutti i controlli di coerenza li faccio tramite l'interfaccia ASP, non uso store procedure o altro (se esistono per Access), non controllo gli errori che ritornano dal database.

    effettivamente non vedo dove come possano servirmi le relazioni. io le ho fatte perche' cosi il progetto mi sembrava meglio impostato (ho usato applica integrità referenziale) pero' se mi dite che rallentano le interrogazioni o gli update allora le tolgo.

    A questo proposito un ulteriore chiarimento sulle relazioni e' il seguente (anche se poi scopro che le relazioni non sono da usare e' un problema che vorrei chiarire):

    io ho due tabelle:

    TABELLA_A (marca, modello) PK: marca,modello
    TABELLA_B (marca) PK: marca

    vorrei relazionare (sempre con "applica integrità referenziale) la marca della TABELLA_B a quella della TABELLA_A ma non funziona e mi da errore. come mai???


    grazie dell'aiuto. ciao
    grazie ciao

  2. #2
    Moderatore di CMS L'avatar di kalosjo
    Registrato dal
    Jul 2001
    residenza
    In culo alla luna
    Messaggi
    1,999
    E' vero che le relazioni appesantiscono il database, e rallentano operazioni di inserimento, modifica e cancellazione per via dei controlli di integrità. Ma è vero anche che una query su più tabelle senza relazioni è molto ma molto più lenta della stessa query eseguita sulle stesse tabelle con le relazioni. E la lentezza aumenta ovviamente con l'aumentare dei records nelle tabelle.

    Per farti un esempio, una query che mi è capitata qualche giorno fa su 4 tabelle, di cui 2 contenevano circa 50.000 dati, senza relazioni impiegava circa 8 minuti!!!! con le relazioni solo 4 o 5 secondi..........

    Questo per darti un'idea.


    Seconda domanda.

    Se le tabelle hanno già dati può capitare che non rispettino le regole di integrità referenziale. Controlla i dati
    Scusate i puntini di sospensione...... La verità è che non ho argomenti....

  3. #3
    quando parli di velocita intendi ovvimente query con join.

    in questo caso allora le tengo. certo che 50000 record per Access immagino che siano pesanti (magari dico una cavolata, non pensavo si supportasse tanti record)

    il problema particolare che ho descritto me lo fa con le tabelle vuote.

    lo riscrivo perche' l'errore non e' precisamente come l'ho scritto sopra:

    TABELLA_A (marca, modello) PK: marca,modello FK: marca REF TABELLA_B
    TABELLA_B (marca) PK: marca
    TABELLA_C (codice,modello) PK: codice FK: modello REF tabella_A

    vorrei relazionare (con "applica integrità referenziale) la marca della TABELLA_B a quella della TABELLA_A e questo funziona, pero' quando vado a fare la relazione tra il modello nella TABELLA_C-TABELLA_A con l'integrità referenziale mi da errore mentre senza funziona.

    come posso fare?

    grazie ciao

  4. #4
    ho pensato che il problema fosse che nella TABELLA_C non ci fossero entrambi i campi modello e marca allora ho provato a inserire anche la marca che mancava.

    pero' l'errore rimane. ho inoltre provato a fare una doppia relazione marca-marca modello-modello tra le due tabelle A e C ma ancora nulla.

    L'errore e' questo:

    Microsoft Access. Impossibile creare la relazione eapplicare l'integrità referenziale.

    I dati nella tabella 'TABELLA_C' violano le regole di integrità referenziale. E' possibile, ad esempio, che siano presenti dei record relativi a un impiegato nella tabella correlata ma non nella tabella primaria.

    Modificare i dati in modo che esistano record primari per tutti i record correlati.
    __________________________________________________ __________________

    Ho provato a invertire le tabelle nella relazione ma niente.
    dove sbaglio?

    grazie

  5. #5
    Utente di HTML.it L'avatar di jesus
    Registrato dal
    Jan 2002
    Messaggi
    717
    Originariamente inviato da kalosjo
    E' vero che le relazioni appesantiscono il database, e rallentano operazioni di inserimento, modifica e cancellazione per via dei controlli di integrità. Ma è vero anche che una query su più tabelle senza relazioni è molto ma molto più lenta della stessa query eseguita sulle stesse tabelle con le relazioni. E la lentezza aumenta ovviamente con l'aumentare dei records nelle tabelle.

    Per farti un esempio, una query che mi è capitata qualche giorno fa su 4 tabelle, di cui 2 contenevano circa 50.000 dati, senza relazioni impiegava circa 8 minuti!!!! con le relazioni solo 4 o 5 secondi..........

    Questo per darti un'idea.
    Scusate se mi intrometto ma l'argomento mi interessa. Non pensavo quanto fossero importanti le relazioni in access in termini di velocità di query.
    Mettiamo caso che io abbia un db access dal cliente e ahime non ho fatto le relazioni, come faccio a metterle senza cambiare il db del cliente? Posso fare una query o uno scipt sql per creare le relazioni?
    <%= Jesus %>
    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna" - Albert Einstein.

  6. #6
    Moderatore di CMS L'avatar di kalosjo
    Registrato dal
    Jul 2001
    residenza
    In culo alla luna
    Messaggi
    1,999
    Certo.

    ALTER TABLE nometabella add constraint nome foreign key (nomecampo) references nometabella_referenziata (nomecampo_referenziato) [ON DELETE CASCADE/ON UPDATE CASCADE]

    Però con le tabelle piene potrebbe fallire...

    Se il database non è troppo impegnativo, cioè se non sono presenti molti records non vale la pena......
    Scusate i puntini di sospensione...... La verità è che non ho argomenti....

  7. #7
    Utente di HTML.it L'avatar di jesus
    Registrato dal
    Jan 2002
    Messaggi
    717
    Originariamente inviato da kalosjo
    Certo.

    ALTER TABLE nometabella add constraint nome foreign key (nomecampo) references nometabella_referenziata (nomecampo_referenziato) [ON DELETE CASCADE/ON UPDATE CASCADE]

    Però con le tabelle piene potrebbe fallire...

    Se il database non è troppo impegnativo, cioè se non sono presenti molti records non vale la pena......
    Anche io avevo immaginato una soluzione simile, avevo fatto anche una prova con il CREATE TABLE una volta ed aveva funzionato.
    Cmq credo che faccio prima a farmi dare il DB e a mettere le relazioni a mano per non incorrere in problemi del tipo "non congruenza dei dati".
    Io ho una tabella che contiene più di 8000 record e mettendo le relazioni (anche senza integrità referenziale) ho notato un notevole incremento della velocità.

    Grazie della risposta, ciao.
    <%= Jesus %>
    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna" - Albert Einstein.

  8. #8
    Moderatore di CMS L'avatar di kalosjo
    Registrato dal
    Jul 2001
    residenza
    In culo alla luna
    Messaggi
    1,999
    Originariamente inviato da FlashDomi
    ho pensato che il problema fosse che nella TABELLA_C non ci fossero entrambi i campi modello e marca allora ho provato a inserire anche la marca che mancava.

    pero' l'errore rimane. ho inoltre provato a fare una doppia relazione marca-marca modello-modello tra le due tabelle A e C ma ancora nulla.

    L'errore e' questo:

    Microsoft Access. Impossibile creare la relazione eapplicare l'integrità referenziale.

    I dati nella tabella 'TABELLA_C' violano le regole di integrità referenziale. E' possibile, ad esempio, che siano presenti dei record relativi a un impiegato nella tabella correlata ma non nella tabella primaria.

    Modificare i dati in modo che esistano record primari per tutti i record correlati.
    __________________________________________________ __________________

    Ho provato a invertire le tabelle nella relazione ma niente.
    dove sbaglio?

    grazie
    Il messaggio è molto chiaro: non viene rispettata l'integrità referenziale. Se non ti importa creale senza integrità, altrimenti devi controllare bene i dati...
    Scusate i puntini di sospensione...... La verità è che non ho argomenti....

  9. #9
    hai ragione kalosjo. con le tabelle vuote funziona.

    ti chiedo gentilemente un altro aiuto.

    dato che uso le relazioni potrei usarle per controllare gli errori invece di fare ulteriori controllo con ASP.

    come si fa a intercettare un errore proveniente da Access??

    grazie ciao

  10. #10
    Moderatore di CMS L'avatar di kalosjo
    Registrato dal
    Jul 2001
    residenza
    In culo alla luna
    Messaggi
    1,999
    codice:
    on error resume next
    ........
    ........
    ........
    if err<>0 then
      select case err.number
        case ......
        case ......
      end select
    end if
    Non so bene i numeri, ma non è difficile trovarli...
    Scusate i puntini di sospensione...... La verità è che non ho argomenti....

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.