Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    682

    Normalizzazione dei dati (Ridondanza e prestazioni)

    Salve a tutti volevo un consiglio per capire come sarebbe
    meglio strutturare un database. Devo sviluppare la gestione
    magazzino in due lingue ITA-ENG.

    Gli oggetti aziendali sono:
    categoria, sub_categoria, articoli.

    Faccio un esempio di come vorrei strutturare io la cosa
    prendendo categoria come riferimento:
    Tabella categoria:
    id_categoria | lang
    Tabella desc_categoria_ita
    id_categoria | lang | nome_categoria | descrizione
    Tabella desc_categoria_eng
    id_categoria | lang | nome_categoria | descrizione

    L'alternativa più semplice mi sembra quella di fare una
    tabella categoria e duplicare i campi per le lingue e poi
    selezionare in base a id e lang che mi evita le join
    e migliora le prestazioni.
    Fatemi sapere come la pensate in merito.

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    682
    Rettifico Tabella categoria:
    id_categoria | lang | photo_name
    Me ne ero dimenticato.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    682
    Era un post per raccogliere opinioni e best practice diciamo
    come mai risponde nessuno ?

  4. #4
    [supersaibal]Originariamente inviato da kioto
    Era un post per raccogliere opinioni e best practice diciamo
    come mai risponde nessuno ?
    [/supersaibal]
    Non c'e' un modo migliore per fare delle tabelle, c'e' un modo ottimizzato a seconda di quello che sono le specifiche richieste e le procedure dell'attivita' prevista.

    Quindi si parte dall'analisi dei bisogni, alla disponibilita' dei dati, al modo richiesto di presentarli ed inserirli, risorse, a chi sara' destinato il database. E tanto altro.

    Quindi qualunque tabella puo' andare bene e qualunque potrebbe essere ottimizzata.

    Nel tuo caso vedo la ripetizione di colonne, i nomi identici... sara' tanto per dare una idea.... ma da una idea errata. Quindi non saprei che dirti. Un esempio: se la tabella e' inglese che ci fa un campo che dice che e' inglese o non italiana?


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

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    682
    Diciamo che in questa base dati dovevo inserire delle categorie é ho la descrizione ed il nome della categoria in due lingue.
    Cmq ho strutturato la cosa in questo modo:

    categoria

    id_categoria int
    lingua enum
    photo varchar

    categoria_desc

    id_categoria
    lingua enum
    nome_categoria
    descrizione

    Io ho pensato di strutturare il Db così. Lo stesso discorso
    lo volevo fare per gli articoli. Spero di rendere il senso.
    Grazie.

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    72
    Secondo me fare un buon lavoro significa fare un qualcosa che sia:

    - Riusabile
    - Espandibile
    - A prova di errore


    Premesso ciò, parli di categoria e sottocategoria....io direi di implementare una struttura con categorie annidabili direttamente....ci son due tipi di script su qualche pillola in questo forum...se non vuoi l'estremo delle prestazioni usa la + semplice:

    tabella categoria
    - id (id univoco, autoincremento)
    - idroot (id della categoria madre, se root = '')

    tabella categoria_attrib
    - id (id univoco, autoincremento)
    - idcategoria
    - idlang
    - titolo
    - descrizione
    - quello che vuoi

    per fare riferimento ad una foto usa sempre l'id categoria...sei sicuro che è univoco ( $id.'.jpg') .. se prevedi sia gif che jpg aggiungi un campo - ext (estensione del file) .. oppure fai un check via script (se esiste il .jpg altrimenti se esiste il .gif altrimenti prendi default.jpg)

    Per gli articoli farei invece:

    tabella articolo
    - id (id univoco, autoincremento)
    - idcategoria
    - prezzo
    - sconto
    - e tutti i campi senza testo

    tabella articolo_attrib
    - id (id univoco, autoincremento)
    - idarticolo
    - idlang
    - titolo
    - descrizione
    - quello che vuoi

    tabella lingua
    - id (id univoco, autoincremento)
    - titolo


    Secondo me è la soluzione migliore perchè:
    - Riusabile (si può utilizzare per una struttura qualsiasi di categoria e per un qualsiasi numero di lingue)
    - Espandibile (aggiungendo una colonna alla fine di ogni tabella possiamo implementare caratteristiche aggiungendo sia campi testuali che campi fissi per tutte le lingue)
    - A prova di errore (i campi fondamentali sulle tabelle articolo e categoria sono univoci, quindi la struttura non ne risente. L'unica perdita potrà essere la mancanza di qualche valore testuale...ma lo script gira cmq e lo aggireremo via php)

    Non ho studiato ne database ne programmazione....la logica che uso deriva unicamente da esperienze personali...accetto volentieri consigli e/o critiche...ciaooo

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    682
    [supersaibal]Originariamente inviato da piero.mac

    Quindi si parte dall'analisi dei bisogni, alla disponibilita' dei dati, al modo richiesto di presentarli ed inserirli, risorse, a chi sara' destinato il database. E tanto altro.

    Quindi qualunque tabella puo' andare bene e qualunque potrebbe essere ottimizzata.

    Nel tuo caso vedo la ripetizione di colonne, i nomi identici... sara' tanto per dare una idea.... ma da una idea errata. Quindi non saprei che dirti. Un esempio: se la tabella e' inglese che ci fa un campo che dice che e' inglese o non italiana?

    [/supersaibal]
    Diciamo che le due tabelle sono uguali ma avevo pensato
    a questa cosa in modo tale da evitare di inserire nome_categorie e descrizione sia in italiano che in inglese
    nella stessa tabella. Poi per eseguire le select
    mi avrebbe favorito il fatto che in un sito dalla doppia
    navigazione avrei letto da un variabile d'ambiente la
    lingua ed avrei evitato di fare più join ma solo una.
    Grazie

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.