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

    aiuto indecisione progettazione

    Salve vorrei un'opinione

    ho una tabella mysql molto popolosa contenente nominativi

    e una tabella di appoggio che vorrei collegare tramite il codice di due caratteri
    quindi la tabella di appoggio ha un campo codice pk di due caratteri

    mi è venuta la mezza idea di creare, nella tabella principale, il campo collegato come char(2) default '00' (zero zero), senza crere chiavi esterne
    in questo modo avrei forse un maggiore consumo di spazio, ma ogni volta che bisogna valorizzare il campo non si dovrebbe allocare nuovo spazio e quindi, forse, maggiori prestazioni

    potrebbe essere?
    semplicità ... al sol nominarla sembra svanire

  2. #2
    non e' chiaro che intendi per allocare nuovo spazio. Intendi nella tabella associata?

    se la tabella che definisci associata comprende esclusivamente un dato allora non ha senso il crearla anche se nella tabella principale dovesse risultare questo campo duplicato.

    dovresti sempre mettere il riferimento al record della tabella associata e la tabella associata avere due campi: id - pk e quindi non e' chiaro anche il tuo riferimento al maggior spazio richiesto

    Se poi questo dato dovesse essere una proprieta' del record come potrebbe essere per esempio la sigla della provincia o il CAP non avrebbe senso costruire una seconda tabella di sigle o cap che si presumo immodificabili.

    se la tabella associata comprendesse invece id-citta-prov-cap gia' converrebbe la seconda tabella specie se questi dati fossero relativamente molti di meno dei nominativi. (stessa citta')
    In questo caso nella tabella nominativi basterebbe un solo byte per indicare l'id del record associato.

    Comunque la scelta deve sempre essere coerente con il progetto e non esiste una regola assoluta.

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

  3. #3
    innanzitutto grazie per la risposta

    effettivamente la mia domanda era difficilemente comprensibile

    nella tabella principale ho un campo sigla_provincia di due caratteri, collegato al campo sigla_provincia della tabella di appoggio, che è anche pk

    tabella principale nominativi
    id int pk ai
    nome
    cognome
    telefono
    sigla_provincia varchar(2) null

    tabella di appoggio province
    sigla_provincia varchar(2) pk
    nome_provincia

    nella tabella principale il campo sigla_provincia potrebbe avere valore null nel caso in cui è ignota la provincia del record oppure potrebbe essere valorizzato con una sigla_provincia 'BA', 'MI', ecc

    allora l'idea, diciamo, sarebbe di usare campi char(2) anzichè varchar(2)
    i campi char(2) mantengono fisicamente lunghezza 2 anche quando sono vuoti
    e nella tabella principale usare, anzichè null, il valore convenzianale '00' zerozero

    tabella principale nominativi
    id int pk ai
    nome
    cognome
    telefono
    sigla_provincia char(2) not null default '00'

    tabella di appoggio province
    sigla_provincia char(2) pk
    nome_provincia

    in questo modo i campi fisici sigla_provincia della tabella nominativi occuperebbero tutti fisicamente lunghezza 2 senza dovere allocare nuovo spazio durante gli aggiornamenti
    se ad esempio ho un nominativo dove la provincia non era valorizzata e la vado a valorizzare, prima il campo valeva '00', poi varrà 'TO', sempre di lunghezza fisica 2

    ora, ho la sensazione che dato che questo approccio che ho descritto, faccia parte di un approccio datato e che i moderni DBMS siano ottimizzati per potere allocare spazio, entro certi limiti, senza l'inconveniente del disordine nei dati fisici con conseguente lentezza

    insomma secondo voi varrebbe la pena fare una cosa sel genere? si? forse? assolutamnte no?
    semplicità ... al sol nominarla sembra svanire

  4. #4
    qualcuno sostiene che, fino a una decina di caratteri, costi di meno, in termini di spazio, usare char() invece di varchar(), anche se il campo resta vuoto.

    forse l'unica è fare delle prove

  5. #5
    tutti i campi definiti varchar di lunghezza fino a tre caratteri vengono trasformati in modo silent in char. vedi il [manuale]

    piuttosto direi che dovresti usare un id numerico per collegare le due tabelle e non un campo char.

    tabella di appoggio province
    id_provincia tinyint unsigned, pk
    sigla_provincia char(2)
    nome_provincia

    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 © 2026 vBulletin Solutions, Inc. All rights reserved.