Autore Topic: Sqlite e foreign key  (Letto 2744 volte)

Offline GeordiE

  • Nuovo arrivato
  • *
  • Post: 18
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows Xp
Sqlite e foreign key
« il: 11 Maggio 2011, 09:27:57 CEST »
0
Salve a tutti sto progettando un db che utilizzerà delle foreign key, quindi sul metodo oncreate del mio SQLiteOpenHelper eseguirò il codice sql per creare le tabelle e i relativi vincoli. Ho letto che per utilizzare le foreign key in SQLite devono essere attivate tramite PRAGMA foreign_keys=ON; a questo punto la mia domanda devo attivarle ogni volta che utilizzo il db o basta solamente invocare il metodo quando creo il db? se sì dove devo invocare tale codice?

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Sqlite e foreign key
« Risposta #1 il: 11 Maggio 2011, 10:10:39 CEST »
0
Leggiti questo, e cerca la stringa: PRAGMA foreign_keys = boolean;

Lì troverai la risposta alla tua domanda.
Ma, fossi in te, leggerei tutto dall'inizio, perché ci sono delle controindicazioni.

^_^
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline GeordiE

  • Nuovo arrivato
  • *
  • Post: 18
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows Xp
Re:Sqlite e foreign key
« Risposta #2 il: 11 Maggio 2011, 10:42:15 CEST »
0
Direi delle forti controindicazioni:
- Specific pragma statements may be removed and others added in future releases of SQLite
- No error messages are generated if an unknown pragma is issued. Unknown pragmas are simply ignored
- Some pragmas take effect during the SQL compilation stage, not the execution stage

Quindi secondo te (voi) per garantire l'efficenza devo utilizzare i trigger ogni volta che inserisco/modifico/cancello tabelle che utilizzano le foreign key?

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Sqlite e foreign key
« Risposta #3 il: 11 Maggio 2011, 11:00:33 CEST »
0
credo che potrebbe essere una soluzione, ma non so se è la migliore (e/o se è l'unica).
fammici pensare un po'.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline GeordiE

  • Nuovo arrivato
  • *
  • Post: 18
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows Xp
Re:Sqlite e foreign key
« Risposta #4 il: 17 Maggio 2011, 21:06:27 CEST »
0
nessuna idea?

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Sqlite e foreign key
« Risposta #5 il: 17 Maggio 2011, 23:54:46 CEST »
0
io per fare un db con foreign key ho fatto un database con un software esterno per Desktop (non ricordo il nome,credo SQlite browser) e da li ho creato le foreign key. Ho poi importato in android e funzionava... Però ho dovuto specificare i dettagli del CascadeDelete ecc... sinceramente, non ricordo piu di questo, è stato solo un test (funzionante)
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline EmilioCuomo

  • Nuovo arrivato
  • *
  • Post: 29
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Tab 10.1v
  • Sistema operativo:
    Windows
Re:Sqlite e foreign key
« Risposta #6 il: 26 Ottobre 2011, 00:17:02 CEST »
0
Mi premerebbe sapere se avete risolto... ho un db con centinsia di tab e migliaia di relazione in MS sqlserver che ho convertito in sqlite .... le relazioni su un softwarr desktop non danno problemi ma sotto android risultani o sempre delle delete cascade... qualche anima buona sa darmi un dritta?

Offline Auron

  • Utente junior
  • **
  • Post: 104
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Motorola Milestone Android 2.2.1
  • Sistema operativo:
    Windows
Re:Sqlite e foreign key
« Risposta #7 il: 15 Dicembre 2011, 16:47:38 CET »
0
Bisogna scrivere dei TRIGGER in SQL e "fortunatamente" sqlite li supporta, lo dico tra virgolette perchè ha 2 svantaggi:
1)è supportato dalla versione 3.6.19 in poi di sqlite (tradotto dalla versione Froyo 2.2 in poi che parte dalla versione 3.6.22)
2)doversi studiare pure i Trigger che è un argomento avanzato di Basi di Dati.

L'unica via che conosco è questa ed è proprio un peccato dato che se uno dovesse lavorare anche con solo 3 Tabelle di cui una è la relazione molti a molti si trova già in questa situazione.

Se conoscete altri modi più veloci postateli, dato che è un problema abbastanza frequente per Applicazioni sulla Gestione di Dati.
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;-)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Sqlite e foreign key
« Risposta #8 il: 15 Dicembre 2011, 17:01:33 CET »
0
Bisogna scrivere dei TRIGGER in SQL e "fortunatamente" sqlite li supporta, lo dico tra virgolette perchè ha 2 svantaggi:
1)è supportato dalla versione 3.6.19 in poi di sqlite (tradotto dalla versione Froyo 2.2 in poi che parte dalla versione 3.6.22)
2)doversi studiare pure i Trigger che è un argomento avanzato di Basi di Dati.

1)A me sembra che dalla versione 3.6.19 abbiano introdotto direttamente il supporto alle foreign keys (vedi SQLite Foreign Key Support ) mentre i trigger sono supportati in qualsiasi versione. Sbaglio?
2)Per chi ha buona domestichezza con le query non è nulla di eccezionale. Si tratta solo di andare sul sito di SQLite e di vedere come si creano. L'inconveniente vero è che se devi farlo per un certo numero di tabelle c'è da spararsi!
« Ultima modifica: 15 Dicembre 2011, 17:04:40 CET da Ricky` »

Offline Auron

  • Utente junior
  • **
  • Post: 104
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Motorola Milestone Android 2.2.1
  • Sistema operativo:
    Windows
Re:Sqlite e foreign key
« Risposta #9 il: 15 Dicembre 2011, 17:20:01 CET »
0
Si esatto volevo dire che è stato introdotto il supporto completo alle foreign key dalla versione 3.6.19 tuttavia sqlite non esegue questa restrizione risultando pertanto possibile inserire dati non validi all'interno delle tabelle pur essendo vincolate. Chiedo scusa se mi sono espresso male.

In ogni caso come dici tu il grosso problema diventa quando hai tante tabelle da controllare, anche se può diventare difficoltoso anche con poche tabelle ma con tanti vincoli. Oltre alla dimestichezza nelle query bisogna anche fare i controlli su ogni possibile eccezione ;-)
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;-)

Offline Auron

  • Utente junior
  • **
  • Post: 104
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Motorola Milestone Android 2.2.1
  • Sistema operativo:
    Windows
Re:Sqlite e foreign key
« Risposta #10 il: 15 Dicembre 2011, 17:50:14 CET »
0
Ah dimenticavo, esiste questo sito che genera automaticamente del codice SQL per i Trigger in base alle tabelle create. Non è affidabilissimo ma ogni tanto funziona dateci un occhio pure voi Trigger Generator.

1)A me sembra che dalla versione 3.6.19 abbiano introdotto direttamente il supporto alle foreign keys (vedi SQLite Foreign Key Support ) mentre i trigger sono supportati in qualsiasi versione. Sbaglio?

I Trigger son stati aggiunti dalla versione 2.5 ;-)  Trigger Sqlite Version
« Ultima modifica: 15 Dicembre 2011, 17:54:27 CET da stefanoadsl »
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;-)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Sqlite e foreign key
« Risposta #11 il: 15 Dicembre 2011, 18:08:47 CET »
0
I Trigger son stati aggiunti dalla versione 2.5 ;-)  Trigger Sqlite Version

Certo, mi riferivo al fatto che sono presenti in ogni versione di SQLite adottata da Android :)