+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

[Altro]Tabelle relazionali in filemaker 11

  1. #1
    Trotter75 non è in linea Novello
    Post
    16
    Like Inviati  
    0
    Like Ricevuti  
    0
    Ciao a tutti, sono nuova nel forum. Sono qui perché sto impazzendo e spero che qualcuno di voi possa aiutarmi a risolvere il mio problema
    Ho progettato un database con Filemaker Pro Advanced (last version), ma non capisco bene il meccanismo delle relazioni. Si tratta di un db con argomento 'archeologico'. Ho una tabella che si chiama 'oggetto' e un'altra tabella che si chiama 'bibliografia'. Vorrei fare in modo che nei record dell'oggetto compaiano i riferimenti bibliografici. La relazione è di uno a molti, perché appunto i riferimenti bibliografici pertinenti ad un solo oggetto possono essere molteplici. In questo tipo di relazione, filemaker genera una tabella 'ponte' in cui ho inserito le due chiavi primarie delle due tabelle che voglio mettere il relazione. Ora, il mio problema è: in ambedue le tabelle devono andare le reciproche chiavi primarie? ovvero in 'oggetto' dev'essere inserita l'id_bibliografia come chiave esterna e in 'bibliografia' dev'essere inserita l'id_oggetto come chiave esterna??? HELP ME!!!

  2. #2
    Post
    2,272
    Blogs
    6
    Like Inviati  
    5
    Like Ricevuti  
    3
    Se ti è stata generata una tabella ponte allora la relazione che filemaker ha ipotizzato è di "Molti a Molti" (N:M) e non di 1 a Molti (1:N)

    Per la relazione 1 a Molti, devi inserire la chiave primaria dell' oggetto come chiave esterna nella tabella bibliografia, in questo modo ogni record "bibliografia" avrà un riferimento all'oggetto, e di conseguenza più bibliografie potranno far riferimento allo stesso oggetto.
    ℹ️ Leggi di più su Fix ...

  3. #3
    Trotter75 non è in linea Novello
    Post
    16
    Like Inviati  
    0
    Like Ricevuti  
    0
    Grazie 1000!!!

    Potresti spiegarmi invece come faccio a creare una relazione 1:1?
    Ho due tabelle, una si chiama 'anfora', l'altra 'studio_anfora'. Ad ogni anfora, corrisponde una scheda di studio. Devo mettere le chiavi primarie di entrambe le tabelle come chiave esterna dell'altra? Se sì, quale delle due chiavi devo collegare? Se le collego entrambe, filemaker mi genera una relazione a criterio multiplo

    Scusa la mia deficienza in materia

  4. #4
    Post
    2,272
    Blogs
    6
    Like Inviati  
    5
    Like Ricevuti  
    3
    Potrei dirti di usare lo stesso metodo utilizzato per la relazione uno a molti !!!

    La differenza tra una relazione 1:1 ed una relazione 1:N consiste nell'univocità della chiave esterna.

    Supponendo che tu abbia:

    *ID_ANFORA          *ID_SCHEDA
    NOME_ANFORA        DESCRIZIONE
    
    O metti in relazione le 2 Chiavi primarie, che saranno sicuramente Univoche (la scheda verrà creata dopo aver creato l'anfora ed il suo ID sarà uguale all'ID dell'anfora):

    *ID_ANFORA <-1----1> *ID_SCHEDA
    
    Oppure crei una chiave esterna in una delle 2 tabelle (proprio come per 1 a molti) e poi imposti un indice UNIVOCO (Duplicati non ammessi)

    es:
    *ID_ANFORA          *ID_SCHEDA
    NOME_ANFORA        DESCRIZIONE
    #ID_SCHEDA
    
    #ID_SCHEDA dovrà essere UNIVOCO ed eventualmente gestisci se è un campo obbligatorio o sono ammessi valori NULL.
    ℹ️ Leggi di più su Fix ...

  5. #5
    Trotter75 non è in linea Novello
    Post
    16
    Like Inviati  
    0
    Like Ricevuti  
    0
    Hola Fix! Grazie per le tue preziose indicazioni!
    Ogni giorno però ho un problema in più

    Sto cercando infatti di fare una relazione n:m tra due tabelle 'scheda_anfora' e 'bibliografia'. Ho creato dunque una tabella di congiunzione che contiene le chiavi primarie di 'scheda_anfora' e 'bibliografia'. Però quando indirizzo le rispettive chiavi verso le due schede 'madri', filemaker mi genera un'ulteriore tabella dicendo che 'non può esservi più di un percorso relazionale fra due tabelle. Al grafico è necessario aggiungere un'altra ricorrenza di una delle tabelle'!!! Non capisco perché, visto che con lo stesso procedimento ho unito la tabella 'anfora' alla tabella 'bibliografia' con tabella 'ponte'. Sarà forse perché la tabella 'bibliografia' è già inserita in un percorso relazionale?

  6. #6
    Post
    2,272
    Blogs
    6
    Like Inviati  
    5
    Like Ricevuti  
    3
    Visto che stiamo andando in modo progressivo, faccio un attimo il punto della situazione (almeno quello fin dove sono arrivato io) visto che hai citato nuovamente la tabella PONTE che, in teoria, non dovrebbe ancora esserci.

    --

    Da quello che abbiamo detto fino ad ora (esclusa l'ultima domanda per N:M) dovresti avere un totale di 3 Tabelle:
    1. Anfora
    2. Bibliografia
    3. Scheda

    Le relazioni applicate fino a questo momento sono:

    Anfora <1---1> Scheda
    Anfora <1---N> Bibliografia

    Per la relazione Anfora/Scheda sono state utilizzate:
    • La chiave primaria di Scheda: ID_SCHEDA
    • chiave esterna su Anfora: ID_SCHEDA

    Per la relazione Anfora/Bibliografia sono state utilizzate:
    • La chiave primaria di Anfora: ID_ANFORA
    • chiave esterna su Bibliografia: ID_ANFORA (nome da me inventato)

    La differenza tra le 2 relazioni, che pongono una 1:1 e l'altra 1:N, è data da:
    • Nella relazione Anfora/Scheda, il campo ID_SCHEDA (su Anfora) sarà settato per permettere valori NULLI e NON permettere valori DUPLICATI
    • Nella relazione Anfora/Bibliografia, il campo ID_ANFORA (su Bibliografia) sarà settato per permettere valori NULLI e DUPLICATI

    Ed io sono fermo qui.

    Ora tu vuoi creare una relazione N:M tra le tabelle SCHEDA e BIBLIOGRAFIA.

    Per farlo devi avere un'ulteriore Tabella (ed arriviamo così a 4 Tabelle totali) che dovrà contenere le 2 chiavi primarie delle rispettive tabelle da relazionare (ID_SCHEDA e ID_BIBLIOGRAFIA)

    Quindi, facendo un ulteriore esempio, diciamo che la tabella (ponte) conterrà almeno 2 campi obbligatori (io ne metterò 3 nell'esempio)
    1. ID_SCHEDA (NUMERICO, NON permetti valori NULLI, Permetti Duplicati)
    2. ID_BIBLIOGRAFIA (NUMERICO, NON permetti valori NULLI, Permetti Duplicati)
    3. DESCRIZIONE (TESTO, Permetti o non permetti valori NULL a tua discrezione, Duplicati a tua discrezione)

    La chiave primaria sarà data dall'unione di "ID_SCHEDA e ID_BIBLIOGRAFIA", in questo modo eviterai la possibilità di immetere più volte gi stessi dati, perchè saranno concessi sì i duplicati, ma non sarà concesso inserire 2 volte lo stesso ID_SCHEDA abbinato allo stesso ID_BIBLIOGRAFIA.
    ℹ️ Leggi di più su Fix ...

  7. #7
    Trotter75 non è in linea Novello
    Post
    16
    Like Inviati  
    0
    Like Ricevuti  
    0
    Ciao Fix, grazie per le tue indicazioni sempre molto chiare

    Le relazioni 1:1 ed 1:n funzionano
    Ed anche quella n:m tra Scheda e Bibliografia
    Invece ho voluto fare un'ulteriore relazione n:m tra Anfora e Bibliografia. Ho creato la tabella ponte inserendo le due chiavi id_anfora e id_bibliografia e le ho settate secondo le tue indicazioni: campo numerico, non permette valori nulli, permette duplicati; il problema è che quando vado ad unire le chiavi della tabella ponte con le rispettive chiavi delle tabelle Anfora e Bibliografia, Filemaker mi genera una seconda tabella!! Anzi, per essere più precisa questo succede quando tento di unire id_bibliografia della tabella ponte con id_bibliografia della tabella Bibliografia perché la relazione tra id_anfora della tabella Anfora e id_anfora della tabella ponte, funziona. Perché? Cosa sbaglio? O non si possono avere relazioni - diciamo - a circuito chiuso poiché Bibliografia è già legata a Scheda??
    Ultima modifica di Trotter75; 08-07-2011 13:59 

  8. #8
    Post
    2,272
    Blogs
    6
    Like Inviati  
    5
    Like Ricevuti  
    3
    Premesso che non sono espertissimo di Database, o almeno non quanto altri amici del Forum, provo ugualmente a "dare un senso" all'accaduto.

    Il problema è dato dal legame che hanno ANFORA, BIBLIOGRAFIA e la Tabella PONTE.

    Non conosco Filemaker ma molto probabilmente si accorge che "potrebbe" verificarsi una violazione di integrità referenziale.

    Ho fatto una prova con SQL ed anche qui viene sollevata un'eccezione (SSCE_M_CYCLEDETECTED - La relazione referenziale comporta la creazione di un riferimento ciclico e ciò non è consentito.) se provi a creare le stesse relazioni cercando di impostare su tutte i vincoli referenziali (in cancellazione) su un valore diverso da NO ACTION

    In pratica, con opzioni differenti da NO ACTION (quali CASCADE), viene violatà l'integrità referenziale.

    Cosa succederebbe se (con CASCADE) venisse eliminato un record ANFORA ?

    Succederebbe che, in automatico, verrebbero eliminati tutti i records BIBLIOGRAFIA che lo referenziano, ma... ID_BIBLIOGRAFIA è presente anche come chiave esterna in PONTE, quindi l' integrità referenziale su PONTE viene violata nel momento in cui viene a mancare il riferimento all' ID_BIBLIOGRAFIA.

    Con SQL ho provato ad impostare NO ACTION, come opzione in cancellazione,(nella relazione 1:N di ANFORA e BIBLIOGRAFIA, lasciando CASCADE in quelle di PONTE) e tutto funziona, nel senso che mi viene generato un errore se provo ad eliminare un record ANFORA referenziato da qualche record BIBLIOGRAFIA, ma se elimino MANUALMENTE il record BIBLIOGRAFIA che referenzia il record ANFORA, e poi elimino il record ANFORA, in automatico vengono eliminati tutti i Records su PONTE che referenziano BIBLIOGRAFIA ed ANFORA

    Sicura che hai bisogno di avere sia la relazione 1:N che N:M ?

    Direi di scegliere una delle 2.
    Ultima modifica di Fix; 09-07-2011 18:26 
    ℹ️ Leggi di più su Fix ...

  9. #9
    Trotter75 non è in linea Novello
    Post
    16
    Like Inviati  
    0
    Like Ricevuti  
    0
    Ciao Fix...purtroppo non conosco il linguaggio SQL e non so cosa significhino 'no action' e 'cascade'

    Uso Filemaker proprio perché spero di riuscire a cavarmela ma a quanto pare è ugualmente dura

    Provo a riassumere, per mettere un po' d'ordine. Sto facendo un database relazionale che serve al laboratorio di archeologia dove lavoro. Si tratta di studiare i 'bolli' presenti nelle anfore (delle specie di 'etichette' che identificavano il fabbricante o la provenienza, per capirci). Avrò quindi una tabella oggetto (che per praticità chiameremo ANFORA), una tabella BOLLO, una tabella STUDIO (ovvero scheda di studio del bollo) e una tabella BIBLIOGRAFIA.

    La tabella ANFORA è legata alla tabella BOLLO tramite una relazione 1:n (infatti in una sola anfora possono esserci più bolli) : per realizzare questa relazione ho inserito l'id_anfora come chiave esterna nella tabella BOLLO.

    La tabella BOLLO è legata alla tabella SCHEDA con una relazione n:n : infatti ogni bollo comporta una scheda di studio pertinente solo a quel bollo. Per realizzare questa relazione ho impostato l'id_studio come chiave esterna della tabella BOLLO.


    Continuando, la tabella ANFORA è legata alla tabella BIBLIOGRAFIA con una relazione n:m, perché in una pubblicazione possono esser pubblicate più anfore e una sola anfora può esser pubblicata in più libri / articoli. Per realizzare questo legame ho creato una tabella ponte, dove ho impostato le due chiavi primarie delle tabelle ANFORA e BIBLIOGRAFIA. Ora la relazione funziona, perché ho cancellato la relazione n:m tra SCHEDA e BIBLIOGRAFIA (credo non sia utile).

    Le relazioni ti sembrano logiche?

    Potresti rispiegarmi la questione di 'no action' e 'cascade'? Mi sembra fondamentale sapere i danni che potrei fare cancellando i record delle tabelle correlate

    Grazie per la tua disponibilità, Fix

  10. #10
    Post
    2,272
    Blogs
    6
    Like Inviati  
    5
    Like Ricevuti  
    3
    Rispondo partendo dalla fine.

    Quote Originariamente inviato da Trotter75
    Potresti rispiegarmi la questione di 'no action' e 'cascade'? Mi sembra fondamentale sapere i danni che

    potrei fare cancellando i record delle tabelle correlate
    Al momento in cui crei una relazione dovrai scegliere come si dovrà comportare il DBMS in caso di Modifica, o Cancellazione, di un record che risulta referenziato da altri record.

    NO ACTION, CASCADE, SET NULL e SET DEFAULT sono le opzioni che è possibile inserire, con SQL, per indicare come bisognerà comportarsi.

    NO ACTION -> Indica che l'operazione dovrà essere ANNULLATA (ed a te verrà segnalato un errore) se si tenta di Aggiornare/Eliminare la chiave di un record che risulta essere una chiave esterna di qualche altro record (quindi referenziata da un altro record) In questo caso bisognerà, MANUALMENTE, eliminare tutti i record che referenziano la chiave primaria e poi si potrà procedere all'eliminazione.

    CASCADE -> Indica che l'operazione di Aggiornamento/Eliminazione della chiave di un Record, Referenziata come chiave esterna su altri record, dovrà essere eseguita "a cascata" su tutti i record in cui è presente tale chiave esterna; Nel caso di Eliminazione questo si trasforma nell'eliminazione dei Record in cui è presente la chiave esterna.

    SET NULL -> Indica che in caso di Aggiornamento/Eliminazione (sempre della chiave di un record che risulta referenziata come chiave esterna su altri record), il valore della chiave esterna, su tali record, dovrà essere settato a NULL.

    SET DEFAULT -> come SET NULL ma verrà settato il valore di default predefinito.

    Quote Originariamente inviato da Trotter75
    La tabella ANFORA è legata alla tabella BOLLO tramite una relazione 1:n (infatti in una sola anfora possono esserci più bolli) : per realizzare questa relazione ho inserito l'id_anfora come chiave esterna nella tabella BOLLO
    Giusto. In questo caso è corretto prevedere l'eliminazione dei relativi BOLLI in caso di eliminazione dell' Oggetto Anfora (Opzione CASCADE)

    Quote Originariamente inviato da Trotter75
    La tabella BOLLO è legata alla tabella SCHEDA con una relazione n:n : infatti ogni bollo comporta una scheda di studio pertinente solo a quel bollo. Per realizzare questa relazione ho impostato l'id_studio come chiave esterna della tabella BOLLO
    n:n o 1:1 ?
    Dovresti chiarire se la Scheda di Studio è direttamente legata al Bollo, ovvero, se non è indipendente ma "esiste" solo in presenza di quel determinato Bollo di riferimento.
    In questo caso sarebbe meglio creare la chiave esterna sulla Scheda Studio referenziando la chiave primaria di BOLLO ed impostando il vincolo di integrità referenziale (modifica e cancellazione) su CASCADE (questo si traforma nell'eliminazione della Scheda di Studio in caso di eliminazione del Bollo)

    Quote Originariamente inviato da Trotter75
    Continuando, la tabella ANFORA è legata alla tabella BIBLIOGRAFIA con una relazione n:m, perché in una pubblicazione possono esser pubblicate più anfore e una sola anfora può esser pubblicata in più libri / articoli. Per realizzare questo legame ho creato una tabella ponte, dove ho impostato le due chiavi primarie delle tabelle ANFORA e BIBLIOGRAFIA. Ora la relazione funziona, perché ho cancellato la relazione n:m tra SCHEDA e BIBLIOGRAFIA (credo non sia utile)
    Va bene.
    ℹ️ Leggi di più su Fix ...

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Eliminare tabelle in altro db
    Da SCvanni nel forum Microsoft Access
    Risposte: 11
    Ultimo Post: 08-08-2015, 19:22
  2. autocompilazione tabelle da elenco in altro foglio
    Da bruce.26 nel forum Microsoft Excel
    Risposte: 22
    Ultimo Post: 22-04-2015, 17:49
  3. Filemaker - Associare 2 tabelle
    Da fdeidda nel forum Altri Database Server
    Risposte: 1
    Ultimo Post: 06-08-2012, 11:44
  4. (Delphi7) Gli operatori relazionali
    Da camaleonteplus nel forum Delphi
    Risposte: 1
    Ultimo Post: 27-04-2010, 20:15
  5. [SQL]Operatori relazionali
    Da cippalippa nel forum Altri Database Server
    Risposte: 3
    Ultimo Post: 04-11-2006, 22:29