Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [mysql] chiavi primarie concatenate

    La tabella citta' ha due chiavi primarie che sono cap e citta.
    La tabella proprietario ha, naturalmente, come chiave esterna le due chiavi di citta' con questa forma
    "cap - citta"

    Quando devo prelevare la citta del proprietario dovrei fare una cosa del genere
    codice:
    SELECT citta.nome,provincia FROM citta
    JOIN proprietario ON proprietario.citta = citta.cap^.-.^citta.nome WHERE idproprietario='91'
    ma e' possibile fare una concatenazione con stringhe a livello di query?/???
    Trinity
    http://www.vocabolariodidio.it
    http://www.giulianodelena.com
    trova la tua casa per le vacanze
    http://www.salento.lecce.it

  2. #2
    up
    Trinity
    http://www.vocabolariodidio.it
    http://www.giulianodelena.com
    trova la tua casa per le vacanze
    http://www.salento.lecce.it

  3. #3
    per concatenare le stringhe puoi usare concat()

    CONCAT(campo1,'-',campo2) as campo3.

    ma la chiave primaria e' una sola, composta da due campi.

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

  4. #4
    scusa ... ma se tieni una sola chiave come il cap? oppure solo la città?

    per la concatenazione va bene come fai se ti serve necessariamente

    altrimenti ... metti una chiave primaria e fai riferimento tramite quella come chiave per le tabelle

  5. #5
    Originariamente inviato da daniele_dll
    scusa ... ma se tieni una sola chiave come il cap? oppure solo la città?

    per la concatenazione va bene come fai se ti serve necessariamente

    altrimenti ... metti una chiave primaria e fai riferimento tramite quella come chiave per le tabelle
    La chiave primaria puo' essere solo il cap o solo la citta' come dici tu... ma ho indivuduato un piccolo problema.

    La mia zona, (Salento) possiede numerosi paesi e frazioni.
    Es. il mio paese Taviano con cap 73057 possiede una frazione>Marina di Mancaversa con uguale cap.
    Il problema potrebbe risolversi con la primary key del nome, ma ho fatto un giro su google per vedere se esistevano altri Taviano in italia e ne ho individuati altri due VVoVe:
    Quindi il singolo nome o il singolo cap non vanno bene come primary key.
    L'ideale e' la concatenazione delle due.
    Il problema potrebbe risolversi con l'aggiunta nell'entita' CITTA con un attributo unico che, al momento dell'inserimento, vado a compilare avente la forma cap - nome.
    Questo aggiunge un pesante overhead al sistema, specialmente se faccio spesso uso delle citta'.

    Ideale sarebbe fare le query concatenando AL VOLO i due campi.

    Ora provo la CONCAT suggerita da piero.mac
    vediamo cosa esce fuori...
    CIAO
    Trinity
    http://www.vocabolariodidio.it
    http://www.giulianodelena.com
    trova la tua casa per le vacanze
    http://www.salento.lecce.it

  6. #6
    scusa ... metti una chiave autoincrement ... usi l'id numerico ... al posto del nome o del cap ... e vai + veloce con meno problemi

  7. #7
    Originariamente inviato da daniele_dll
    scusa ... metti una chiave autoincrement ... usi l'id numerico ... al posto del nome o del cap ... e vai + veloce con meno problemi
    Credo che non valga la pena fare una tabella per nome citta' e cap. Se non ci sono altri dati da gestire che riguardano la citta' questi dati possono tranquillamente stare con la tabella proprietario. Fanno parte di un indirizzo e non possono essere considerati duplicati. Pensa ad una grande citta' dove i CAP sono centinaia...


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

  8. #8
    Originariamente inviato da piero.mac
    Credo che non valga la pena fare una tabella per nome citta' e cap. Se non ci sono altri dati da gestire che riguardano la citta' questi dati possono tranquillamente stare con la tabella proprietario. Fanno parte di un indirizzo e non possono essere considerati duplicati. Pensa ad una grande citta' dove i CAP sono centinaia...

    Si, pero' se l'entita' citta' deve essere condivisa da altre entita', allora la si DEVE fare a parte...
    dipende dallo schema ER...
    Nel mio caso e' conveniente farla a parte.

    Per quanto riguarda il consiglio di daniele_dll .... mmmmm.... l'avevo pensato gia' da tempo quella soluzione, ma non mi sembrava tanto elegante.
    C'e' da dire pero' che sembra un metodo piu' efficiente.

    Ancora non ho provato la CONCAT ... speriamo che vada
    Trinity
    http://www.vocabolariodidio.it
    http://www.giulianodelena.com
    trova la tua casa per le vacanze
    http://www.salento.lecce.it

  9. #9
    Direi invece che una chiave primaria id INT auto increment sia decisamente "elegante" se a pulizia ed efficienza intendi riferirti.


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

  10. #10
    Non so perche', ma il mio vecchio professore di basi di dati all'universita' odiava questo tipo di chiavi primarie.... saro' stato condizionato da lui
    Trinity
    http://www.vocabolariodidio.it
    http://www.giulianodelena.com
    trova la tua casa per le vacanze
    http://www.salento.lecce.it

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.