Pagina 2 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 36
  1. #11
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    Se hai una
    tabella libro con i campi :
    id_libro
    titolo
    editore
    anno
    etc.....

    tabella persona :
    id_persona
    nome
    cognome
    etc...

    tabella autore :
    id_libro
    id_persona
    tipo_autore (1=Autore, 2=A cura di)

    basta fare la query seguente :
    select libro.id_libro, titolo, editore, anno, nome, cognome, tipo_autore
    from libro
    inner join autore on libro.id_libro = autore.id_libro
    inner join persona on autore.id_persona = persona.id_persona
    where titolo like '%utopisti%'

    Ti sceglie i record dalla persona che sia autore o "a cura".
    Ovviamente puoi arricchire con una tabella tags legata alla tabella libro.

    tabella tags :
    id_tag
    tag (esempi : giallo, storia, scienza - ogni voce è un record)

    tabella tags_libro
    id_tag
    id_libro

    Poi il principio della query rimane quello di prima.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  2. #12
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    445
    Otimo, risposte molto utili!
    Ho considerato di mettere questi record:
    ISBN | NOME AUTORE | COGNOME AUTORE | TITOLO | CURATORE |
    EDITORE | LUOGO | ANNO | EDIZIONE | SOGGETTO
    Una chiave primaria potrebbe essere l'ISBN, che è ovviamente
    un codice univoco. In questo caso come potrei normalizzare la tabella?
    Il SOGGETTO dovrebbe essere una tabella a parte?
    Ovviamente puoi arricchire con una tabella tags legata alla tabella libro
    tabella tags :
    id_tag

    tag (esempi : giallo, storia, scienza - ogni voce è un record)
    Qui non capisco bene: nel campo SOGGETTO le entry sono innumerevoli,
    imprevedibili: "tomismo, scolastica" (cioè 2 entry) in un caso,
    "epistemologia, cognitivismo, scetticismo" (3 entry) in un altro e così via.
    Dovrei costruire un record separato per ogni voce?

  3. #13
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    Dipende da quanti libri avrai. Se ne hai un centinaio o migliaia.
    Se hai un campo SOGGETTO (assai lungo) puoi mettere molte parole e puo' bastare.
    I vantaggi di una tabella a parte sono molti.
    • La voce è presente una volta sola nel db.
    • Le query e la programmazione sono più semplici
      • Per esempio fai una pagina che elenca tutte le voci per poi cliccarle e vedere tutti i libri associati.
        • Se hai il soggetto nella tabella libro allora devi leggere tutti i libri (se sono migliaia...), individuare ogni singola voce, metterla in una lista delle voci che deve essere univoca. Se vuoi anche stampare a video il numero dei libri per voce diventa ancora più complicato. Pero' è fattibile.
        • Se hai una tabella a parte, basta fare la query seguente :
          • SELECT voce.id_voce, voce, count(*) as numero_libri FROM voce
            INNER JOIN soggetto ON voce.id_voce = soggetto.id_voce
            GROUP BY voce.id_voce, voce

      • Risparmi spazio disco (dipende dal numero dei libri) perchè alla fin fine avrai sempre meno voci di libri.
      • Poi altri vantaggi... ma devo andarmene


    codice:
    tabella libro :
    ===========================
    id_libro | titolo
    ===========================
       10    | Pippo alla spiaggia
       11    | Pippo a Parigi
    ===========================
    tabella voce :
    ===========================
    id_voce | voce
    ===========================
       1    | epistemologia
       2    | tomismo
       3    | storia
       4    | arte
    ===========================
    tabella soggetto :
    ===========================
    id_libro | id_voce
    ===========================
       10    |    1
       10    |    4
       11    |    2
       11    |    3
       11    |    4
    ===========================
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  4. #14
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    445
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Dipende da quanti libri avrai. Se ne hai un centinaio o migliaia.
    Se hai un campo SOGGETTO (assai lungo) puoi mettere molte parole e puo' bastare.]
    I volumi da registrare sono circa 10.000. Chiari i vantaggi che prospetti.
    Non avevo immaginato di sdoppiare VOCE e SOGGETTO...
    Per cui, guardando al db nella sua interezza, le tabelle da costruire considerando
    che le voci saranno:
    ISBN | AUTORE | CURATORE | TITOLO | EDITORE | LUOGO | ANNO | EDIZIONE | SOGGETTO
    e che EDITORE e LUOGO sono sempre associati perché Einaudi è sempre di Torino
    e Laterza è sempre di Roma-Bari quali dovrebbero essere per ottimizzare il db stesso?

  5. #15
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    Nella tabella libro devi avere un id_editore e quindi una tabella editore.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #16
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    445
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Nella tabella libro devi avere un id_editore e quindi una tabella editore.
    Per cui globalmente che tabelle dovrei creare,
    sempre tenendo presente la coppia fissa EDITORE - LUOGO ?

  7. #17
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    Buttati fai la tua lista.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #18
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    445
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Buttati fai la tua lista.
    codice:
    tabella LIBRO
    ==========================
    id_libro   | ISBN   | titolo   | anno | edizione 
    ==========================
    tabella AUTORE
    id_autore  | nome   | cognome
    ==========================
    tabella CURATORE
    id_autore  | nome   | cognome
    ==========================
    tabella EDITORE
    id_editore | editore | luogo
    ==========================
    tabella VOCE
    id_voce    | voce
    ==========================
    tabella SOGGETTO
    id_libro   | id_voce
    ==========================
    Ha senso? Come id_libro non potrei usare direttamente l'ISBN
    o è meglio in effetti una chiave autoincrementante?
    Ovviamente campi come ANNO o EDIZIONE non ha alcun senso
    che siano indicizzati...
    Ultima modifica di samiel; 02-11-2014 a 23:25

  9. #19
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    codice:
    tabella LIBRO
    ==========================
    id_libro   | ISBN   | titolo   | anno | edizione | id_editore
    ==========================
    tabella AUTORE_LIBRO
    id_autore | id_libro | tipo (1=autore, 2=curatore)
    ==========================
    tabella AUTORE
    id_autore  | nome   | cognome 
    ==========================
    tabella EDITORE
    id_editore | editore | luogo | paese
    ==========================
    tabella VOCE
    id_voce    | voce
    ==========================
    tabella SOGGETTO
    id_libro   | id_voce
    ==========================
    Poi potresti avere bisogno di altri campi, per esempio data di nascita e di morte di un autore, sito internet dell'editore, lingua del libro, lingua della voce, etc....



    Ha senso? Come id_libro non potrei usare direttamente l'ISBN
    o è meglio in effetti una chiave autoincrementante?
    Ovviamente campi come ANNO o EDIZIONE non ha alcun senso
    che siano indicizzati...
    Potresti usare l'ISBN ma non te lo consiglio. Se tu sbagliassi un ISBN diventerebbe molto difficile correggerlo in tutte le tabelle mentre è facilissimo quanto correggere il titolo se hai un id autoincrementale. Dovrai comunque controlare che non venga immesso più volte.
    Puoi creare degli indici su quei campi se ne hai bisogno. 10.000 record sembrano molti ma sono pochissimi per un database.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  10. #20
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    445
    Poi potresti avere bisogno di altri campi, per esempio data di nascita e di morte di un autore, sito internet dell'editore, lingua del libro, lingua della voce, etc....
    Pensavo di aver fatto anche peggio

    In ogni caso ho pensato di distinguere AUTORE da EDITORE perché è essenziale
    la compresenza delle due voci ad es nei testi antichi. Considera:
    Epicuro, Opere, a cura di G. Arrighetti, Einaudi....
    Epicuro, Opere, a cura di M. Isnardi Parente, UTET....
    Invece mi pare che nel tuo codice le due possibilità siano mutualmente esclusive
    e invece non devono esserlo


    Potresti usare l'ISBN ma non te lo consiglio. Se tu sbagliassi un ISBN diventerebbe molto difficile correggerlo in tutte le tabelle mentre è facilissimo quanto correggere il titolo se hai un id autoincrementale. Dovrai comunque controlare che non venga immesso più volte.
    Puoi creare degli indici su quei campi se ne hai bisogno. 10.000 record sembrano molti ma sono pochissimi per un database.
    Sì, come dicevo sopra questo lo sospettavo anch'io.

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