Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Relazioni entità

  1. #1
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202

    Relazioni entità

    Ciao a tutti

    Ho bisogno di un suggerimento sulla struttura da poter adottare, vi spiego in breve qual'è la mia situazione :

    Tebella A
    a1
    a2
    a3

    Tabella B
    b_id
    b1
    b2
    b3

    Tabella C
    b_id
    c1
    c2
    c3

    E' corretto utilizzare il campo b3 che può fare riferimento sia alla tabella B che alla tabella C?
    Secondo me complica la cosa perchè tramite una left join mi diventa difficoltoso avere abere il record presente o sulla tabella b o sulla tabella c.

    Entrando un po indettaglio per farvi capire la realtà.
    Il campo a3 sarebbe un codice di aggancio al "misuratore".
    Tabella B e C sono due misuratori diversi, ogni tabella ha i suoi campi che sono completamente diversi da uno all'altro.

    Grazie a tt
    Che mestiere difficile.....essere da soli ancora di più

  2. #2
    Se ho capito la tabella di riferimento con tutti i record e' la tab_a. le tab_b e tab_c potrebbero avere o non aver un record di riferimento a tab_a

    quindi dovrai basarti su tab_a del tipo:

    from tab_a
    left join tab_b on tab_a.campo_rif = tab_b.campo_rif
    left join tab_c on tab_a.campo_rif = tab_c.campo_rif

    la query presentera' TUTTI i record di tab_a mentre per le due tabelle b e c solo i record con valore associato e NULL se mancante.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    A parte il fatto che la mia spiegazione era piena di errori, ma vedo che sei riuscito a capire lo stesso, cmq ripropongo.

    Tebella A
    a1
    a2
    a3

    Tabella B
    b_id
    b1
    b2
    b3

    Tabella C
    c_id
    c1
    c2
    c3

    Il campo a3 è un valore di aggancio.
    Esso, a fronte di quale tipo di appartato sia, può contenere sia il valore b_id oppure il valore c_id.....
    Anche io vedo come unica strada quella di effettuare tt le left join possibili quante sono le tabelle b,c,d.....n.
    Più che altro mi sembrava una pratica un po controversa e poco performante.
    Tu che ne pensi?
    Che mestiere difficile.....essere da soli ancora di più

  4. #4
    In effetti la chiarezza sembra abitare altrove....

    La tabella di aggancio potrebbe significare tabella di unione? Ma se aggancia / unisce due record significa che ci sono due o piu' tabelle da unire.
    Poi compare dopo la tabella a-b-c anche nn altre tabelle.... che vor di?

    mettiamo a caso una tabella nomi e una tabella professioni; siccome ci potranno essere piu' stessi nomi che fanno professioni diverse e nello stesso tempo nomi diversi che fanno la stessa professione avrai bisogno di una terza tabella che associ in modo univoco nome-professione e questo lo fa tramite l'id del record che pare tu non consideri.

    quindi tabella nomi con id_nome - nome -altro
    tabella professioni con id_professione - professione - altro
    tabella unione con id_unione - id_nome - id_professione

    ma questo sicuramente lo saprai gia'.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    No porto esempio per farti capire

    Tabella ParcoInstallato.
    parco_1
    parco_2
    parco_3
    parco_misuratore

    Mettiamo che nel campo parco_misuratore ci può essere il valore 1 o 2
    I valori 1 e 2 fanno riferimento ad una tipologia specifica di misuratore

    Se nel campo parco_misuratore ho valore 1 devo fare una left all'interno di questa.
    Tabella Misuratore_tipo1
    mis1_marca
    mis1_modello
    mis1_sn
    mis1_datoanalisi

    Se nel campo parco_misuratore ho valore 2 devo fare una left all'interno di questa.
    Tabella Misuratore_tipo2
    mis2_marca
    mis2_modello
    mis2_sn
    mis2_contatore
    mis2_modem

    L'associazione tra ParcoInstallato e Misuratore_tipo1 O Misuratore_tipo2 è sempre di 1:1.

    Le tabelle Misuratore_tipo1 e Misuratore_tipo2 sono così tanto eterogenee che diventerebbero giganteschenell'unirle.

    Spero di essere stato un po più comprensibile.
    Che mestiere difficile.....essere da soli ancora di più

  6. #6
    quindi parco_misuratore e' di fatto l'id delle altre due tabelle che hanno un solo record? Oppure in b e c ci sono tanti record?

    Quello che non quadra e' che tu definisci il tipo di tabella in a.parco_misuratore mentre nelle tabelle b e c manca un campo che identifichi il misuratore come tipo 1 o 2.

    Aggiungi un campo "tipo_misuratore = 1" in b e "tipo_misuratore = 2" in c

    A questo punto la query diventa elementare:

    select *
    from tab_a as a
    left join tab_b as b on a.tipo_misuratore = b.tipo_misuratore
    left join tab_c as c on a.tipo_misuratore = c.tipo_misuratore

    in sostanza ti manca la relazione tra i record delle tabelle. Il nome tabella e' una cosa ma deve esserci anche la relazione al record.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Il campo parco_misuratore sta in teoria ad indicare a quale delle due tabelle fare rifermiento.

    Hai ragione anche tu non potevi immaginarlo.
    La chiave su cui vado a fare la left join è un'altra e che non ho indicato, ma solo per una questione pratica.
    Volevo sapere se era prassi corretta avere un campo il quale valore identifichi la tabella di destinazione della left join.
    Che mestiere difficile.....essere da soli ancora di più

  8. #8
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Il campo parco_misuratore sta in teoria ad indicare a quale delle due tabelle fare rifermiento.

    Hai ragione anche tu non potevi immaginarlo.
    La chiave su cui vado a fare la left join è un'altra e che non ho indicato, ma solo per una questione pratica.
    Volevo sapere se era prassi corretta avere un campo il quale valore identifichi la tabella di destinazione della left join.
    Che mestiere difficile.....essere da soli ancora di più

  9. #9
    Quote Originariamente inviata da Fractals87 Visualizza il messaggio
    La chiave su cui vado a fare la left join è un'altra e che non ho indicato, ma solo per una questione pratica.
    Volevo sapere se era prassi corretta avere un campo il quale valore identifichi la tabella di destinazione della left join.
    Ha senso solo come indicazione di carattere informativo. il riferimento avviene nell'indicazione della tabella nel left join. quello che conta e' il campo di riferimento tra le due tabelle.

    tab_a.id = tab_b.id

    in pratica non hai indicato il campo piu' importante per una join

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.